При работе с Oracle (с использованием 12c Enterprise Edition Release 12.1.0.2.0) мы можем написать что-то вроде ...
SQL> select * from dual ;
DUMMY
X
Однако невозможно использовать «а» вПредложение FROM, как таблица, как это было - например,
SQL> select * from 'a' ;
Error starting at line : 1 in command -
select * from 'a'
Error at Command Line : 1 Column : 15
Error report -
SQL Error: ORA-00903: invalid table name
00903. 00000 - "invalid table name"
*Cause:
*Action:
При кодировании CURSOR FOR LOOP (PL / SQL) я обнаружил, что скомпилирован следующий код функции:
create or replace function f (
a varchar2
) return varchar2
is
begin
for r in ( select * from a ) -- parameter (type varchar2) as table name!
loop
dbms_output.put_line( ' a -> ' || a ) ;
end loop;
return a ;
end f ;
/
Function F compiled
Тестирование
set serveroutput on
SQL> select f( 'z' ) from dual ;
F('Z')
z
a -> z
a -> z
Вопросы
{1} Как возможно, что мы можем использовать имя параметра (которое представляет один varchar2) в предложении FROM оператора SELECT в PL /Курсор SQL для цикла?
{2} (В примере) Почему DBMS_OUTPUT.PUT_LINE (), по-видимому, выполняется дважды?