0

一部のデータを返すためにOracle内で実行する次のスクリプトがありますが、これをストアドプロシージャとして保存したいので、実行時にこのコード全体を再実行し続ける必要はありません。誰かがこれを行う方法を教えてくれれば、とても感謝しています。私はすでに実験してきましたが、あまり運がありませんでした。

以下は、ストアド プロシージャから実行したいコードです。

SET SERVEROUTPUT ON;
declare 
cursor c_emp is
select *
from train;
r_emp c_emp%ROWTYPE;
begin
open c_emp;
loop
fetch c_emp into r_emp;
exit when c_emp%NOTFOUND;
DBMS_OUTPUT.put_line(r_emp.trainid);
end loop;
close c_emp;
end;
4

3 に答える 3

1
create or replace procedure procedure_name
is
begin
declare 
cursor c_emp is
select *
from train;
r_emp c_emp%ROWTYPE;
begin
open c_emp;
loop
fetch c_emp into r_emp;
exit when c_emp%NOTFOUND;
DBMS_OUTPUT.put_line(r_emp.trainid);
end loop;
close c_emp;
end;
end procedure_name;
/

次に、次の手順を実行するだけです:-

execute procedure_name;
于 2013-04-08T11:59:41.457 に答える
1

ref カーソルの代わりに、パイプライン関数を使用できます (一部の SQL クライアントでは使いやすい)。

create type id_list as table of integer
/

CREATE OR REPLACE function get_trains
  return id_list
  pipelined
as
begin  
  for train_rec in (select trainid from train) loop
    pipe row (train_rec.trainid);
  end loop;
  return;
end;
/

これは、次の方法で使用できます。

select *
from table(get_trains());
于 2013-04-08T12:15:21.620 に答える
0

Oracleでデータを選択するにはカーソルが必要です。詳細については、 Oracle – ストアド プロシージャからレコードセットを返すリンクを参照してください。

-- Create package
CREATE OR REPLACE PACKAGE types
AS
type cursorType is ref cursor;
END;

-- Here we have declared cursor variable of type cursorType as an output variable.
CREATE OR REPLACE PROCEDURE SP_SELECT_DATA
(
  p_ResultSet        OUT  TYPES.cursorType
)
AS
BEGIN
  OPEN p_ResultSet FOR
  select * from your_table;
END SP_SELECT_DATA;

--Testing
VARIABLE resultSet  REFCURSOR
EXEC SP_SELECT_DATA(:resultSet);
PRINT :resultSet
于 2013-04-08T12:01:13.680 に答える