1

次のforループがあります

for i in (
select * from employees)

loop
--code
end loop;

次のような変数にselectステートメントを割り当てることは可能ですか

sql_stat := 'select * from employees';

そしてループ中

for i in (
    sql_stat)
loop

上記を試してみると、 「シンボルループに遭遇しました」というエラーが表示されます

選択ステートメントを変数に割り当てたい場合、これを行う正しい方法は何ですか。

ありがとう

4

2 に答える 2

4

必要な結果を得るために使用できますref cursors。ここに例があります。

declare
      type t_cursor is ref cursor;
      c_cursor t_cursor;
      l_sql varchar2(123);
      l_var number;
   begin
     l_sql := 'select count(*) from T1';  -- your query goes here
     open c_cursor for l_sql;
     loop
       fetch c_cursor 
        into l_var;-- variable(s) of appropriate datatype you want to fetch data into
       exit When c_cursor%notfound;
       -- any work for processing fetched data goes here
     end loop;  
  end; 
于 2012-09-18T10:30:42.413 に答える
0

selectステートメントを変数に格納するのはなぜですか?クエリの一部が可変である場合にのみこれを行います。たとえば、table_name。

通常、クエリは静的であり、行のクエリ行の結果にアクセスする通常の方法は、次のようなループのカーソルを使用することです。

declare
   cursor c is 
     select column1,column2 
     from table;
begin
  for r in c loop
     dbms_output.put_line(r.column1||' '||r.column2);
  end loop;
end;
于 2012-09-18T11:51:10.070 に答える