이것은 범위 지정 문제입니다.
게시 한 항목에서 추정 한 나의 버전입니다. 매개 변수 이름은 속성 이름과 다릅니다. 이 테스트 데이터를 제공
create or replace type folder_t as object
(name varchar2(128))
/
create table folders of folder_t
/
create or replace function getRef
(nome in varchar2)
return ref folder_t
is
fl_r REF folder_t;
begin
select ref(fl)
into fl_r
from folders fl
where fl.name = nome;
return fl_r;
end getRef;
/
당신이 볼 수 있듯이, ...
SQL> insert into folders values (folder_t('temp'))
2/
1 row created.
SQL> insert into folders values (folder_t('work'))
2/
1 row created.
SQL>
... 나는이 심판을 조회 할 수 있습니다 내가 기능을 변경하는 경우,
SQL> select getRef('temp') from dual
2/
GETREF('TEMP')
--------------------------------------------------------------------------------
00002802091051432318864AF594741916D743E1291CF597373A4F4D7A93F159DA53A73FC0010372
2D0000
SQL> select getRef('work') from dual
2/
GETREF('WORK')
--------------------------------------------------------------------------------
0000280209F31778C18D5740FBA0CB90929E1B6FBD1CF597373A4F4D7A93F159DA53A73FC0010372
2D0001
SQL>
을하지만, 선언에서 매개 변수 이름이 속성 이름과 같으면 다음과 같이됩니다.
SQL> create or replace function getRef
2 (name in varchar2)
3 return ref folder_t
4 is
5 fl_r REF folder_t;
6 begin
7 select ref(fl)
8 into fl_r
9 from folders fl
10 where fl.name = name;
11
12 return fl_r;
13 end getRef;
14/
Function created.
SQL> select getRef('temp') from dual
2/
GETREF('TEMP')
------------------------------------------------------------
SQL>
SQL 엔진은 테이블의 범위를 바깥쪽에 적용합니다. 규정되지 않은 NAME
은 테이블의 열과 일치하므로 해당 이름의 매개 변수도 있는지 확인하지 않습니다. 따라서 매개 변수에 별개의 이름을 지정하는 것이 좋습니다. Persoanlly 나는 파라미터 접두어를 P_
으로 접두사로 사용하기를 선호합니다. 따라서 지역 변수 나 객체 이름과의 paremeter 충돌 가능성은 없습니다.
출처
2010-05-24 21:01:45
APC
나는 아무 잘못 구문이 많다는 표시되지 않습니다. 'DESC FOLDER_TAB'의 결과는 무엇입니까? 당신이 받고있는 오류를 아는 것도 도움이 될 것입니다. –