pl/sql 저장 프로시저: 매개 변수 이름이 열 이름과 같습니다.
다음과 같은 저장 프로시저가 있습니다.
procedure P_IssueUpdate
(
Id in integer,
ModifiedDate in date,
Solution in varchar2
) AS
BEGIN
update T_Issue
Set
ModifiedDate = ModifiedDate,
Solution = Solution
where id = id;
END P_IssueUpdate;
제 문제는 매개 변수 이름이 테이블 열 이름과 같다는 것입니다.SQL에 "=" 뒤의 값이 열이 아니라 매개 변수여야 한다고 지시하는 방법이 있습니까?
도와주셔서 고마워요.
다음과 같이 매개 변수 및 변수 이름 앞에 절차 이름을 붙일 수 있습니다.
SQL> declare
2 procedure p (empno number) is
3 ename varchar2(10);
4 begin
5 select ename
6 into p.ename
7 from emp
8 where empno = p.empno;
9 dbms_output.put_line(p.ename);
10 end;
11 begin
12 p (7839);
13 end;
14 /
KING
PL/SQL procedure successfully completed.
해결책을 찾았습니다.매개 변수를 완전히 검증함으로써 작동합니다.
procedure P_IssueUpdate
(
Id in integer,
ModifiedDate in date,
Solution in varchar2
) AS
BEGIN
update T_Issue
Set
ModifiedDate = P_IssueUpdate.ModifiedDate,
Solution = P_IssueUpdate.Solution
where id = P_IssueUpdate.id;
END P_IssueUpdate;
당신이 설명한 것을 변수 그림자라고 합니다.그것은 어떤 언어로도 일어날 수 있습니다.좋은 해결 방법이 제공되었지만 일반적인 해결 방법은 이러한 일이 발생하지 않도록 명명 체계를 설계하는 것입니다.
예를 들어, 접두사 없이 열 이름을 지정하고 범위에 따라 달라지는 접두사로 변수를 지정합니다.P_
매개 변수의 경우,L_
로컬 변수의 경우,G_
글로벌 패키지 변수 등의 경우).이렇게 하면 추가 정보를 제공하여 코드를 더 읽기 쉽게 만들 수 있습니다.
접두사 추가에 대한 RE Vincent의 답변은 누군가가 테이블을 수정하고 이름이 매개 변수 이름과 충돌하는 열을 추가할 때까지 작동합니다.모든 사람이 테이블 수정 내용이 변수 또는 매개 변수 이름과 충돌하지 않도록 모든 코드 행을 검토하는 것은 아닙니다.Oracle은 SQL 쿼리의 모든 매개 변수 또는 변수 이름을 한정하는 것이 좋습니다.
익명 블록(프로시저 외부)을 사용하는 경우 다음과 같은 방법으로 블록 이름을 지정하고 변수를 한정할 수 있습니다.
<<MY_BLOCK>>
declare
X sys.USER_TABLES%rowtype;
Y sys.USER_TABLES.TABLE_NAME%type := 'some_table_name';
begin
select UT.*
into MY_BLOCK.X
from sys.USER_TABLES UT
where UT.TABLE_NAME = MY_BLOCK.Y;
end MY_BLOCK;
언급URL : https://stackoverflow.com/questions/1607891/pl-sql-stored-procedure-parameter-name-same-as-column-name
'programing' 카테고리의 다른 글
Oracle 데이터베이스 통계를 얼마나 자주 실행해야 합니까? (0) | 2023.07.10 |
---|---|
오류: Firebase App '[DEFAULT]'이(가) 생성되지 않았습니다. Firebase App.initializeApp() 호출 (0) | 2023.07.10 |
Spring Fox를 사용한 Spring Boot Swagger 구현 'documentation Plugins Bootstrapper' 시작 실패 (0) | 2023.07.10 |
파이썬의 통화 형식 (0) | 2023.07.10 |
asp.net 텍스트 상자에 정수 값이 있는지 확인하기 위한 유효성 검사 (0) | 2023.07.10 |