Oracleストアドプロシージャデータテーブルを入力パラメータとして書き込む方法は誰でも知っています。
1455 次
3 に答える
0
このような場合、データベース一時テーブルを使用するのが非常に一般的です。つまり、データテーブルレコードをテーブルに挿入し、接続を閉じずにプロシージャを呼び出して、一時データを確認して処理できるようにします。
擬似コードは次のようになります。
//Get the data you want to process
DataTable data = GetData();
//Create new Connection
Connection conn = Connection.CreateNew();
//Open the connection
conn.Open()
//Insert the data on a temporary table using the open connection
InsertDataIntoTemporaryTable(conn, data);
//Call the procedure to process the data using the same open connection
CallProcedureToProcessData(conn);
//Finish by ending the connection (everything done in the procedure will be commited)
conn.Close();
別の実装可能なオプションは、アプリケーションがフィールドと行の区切り文字で連結されたすべてのデータテーブルレコードを渡すCLOBパラメーターを使用してプロシージャを構築することです。この手順では、2つの方法で分割し、varchar2のテーブルによって形成されるレコードのテーブルのように、より適切な構造を形成する必要があります。
于 2012-10-06T13:11:24.013 に答える
0
EMPLOYEES
以下は、 からに1 行をコピーする例EMPLOYEES_COPY
です。お役に立てば幸いです。
DROP TABLE EMPLOYEES;
/
DROP TABLE EMPLOYEES_COPY;
/
CREATE TABLE EMPLOYEES
(
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
);
insert into EMPLOYEES values(1,'AA','BBB');
insert into EMPLOYEES values(2,'CC','GGG');
insert into EMPLOYEES values(3,'EEE','MMM');
insert into EMPLOYEES values(4,'FFF','ZZZ');
/
CREATE TABLE EMPLOYEES_COPY
(
ID INT,
FIRST_NAME varchar(30),
LAST_NAME varchar(30)
);
/
CREATE OR REPLACE PACKAGE EMPLOYEE as
type t_cursor is ref cursor;
procedure GETALL(curEMPLOYEE out t_cursor);
procedure INSERT_COPY;
end EMPLOYEE;
/
CREATE OR REPLACE PACKAGE BODY EMPLOYEE as
---------------------------------------------
procedure GETALL(curEMPLOYEE out t_cursor) as
begin
open curEMPLOYEE for SELECT id, FIRST_NAME, LAST_NAME
FROM EMPLOYEES;
end GETALL;
---------------------------------------------
procedure INSERT_COPY as
cur t_cursor;
emp employees%rowtype;
begin
GETALL(curEMPLOYEE=>cur);
LOOP
FETCH cur INTO emp;
EXIT WHEN cur%NOTFOUND;
insert into EMPLOYEES_COPY
values(emp.id,emp.FIRST_NAME,emp.LAST_NAME);
END LOOP;
end INSERT_COPY;
end EMPLOYEE;
/
パッケージは、単一のエンティティの機能をグループ化できるため、非常に便利です。例では、従業員に取り組んでいる関数をグループ化しました。
以下を使用して例をテストできます。
BEGIN
EMPLOYEE.INSERT_COPY;
commit;
END;
詳細情報
ここに同様の問題があります。
于 2012-10-06T13:48:05.457 に答える
0
パラメータを として渡し、varchar2
クエリ文字列を作成して、EXECUTE IMMEDIATE
または カーソルとして実行します。その他の例はこちら
アップデート。例:
create table temp11(id int not null);
/
create or replace
procedure test_proc(table_name varchar2)
as
query_str varchar2(200);
begin
query_str := 'INSERT INTO '||table_name||'(id) values (2)';
EXECUTE IMMEDIATE query_str ;
end;
/
exec test_proc('temp11');
commit;
于 2012-10-06T12:39:21.557 に答える