2012-10-06 33 views

回答

0

傳遞一個參數爲varchar2,然後構建您的查詢字符串並使用EXECUTE IMMEDIATE或作爲遊標執行它。更多示例here

UPDATE。示例:

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; 
+0

嗨a1ex07感謝您的答覆,實際上我不得不使用插入查詢插入整個表數據到數據庫,然後如何編寫存儲過程。任何樣品plz發佈。 –

+0

@Sreedhar goud:檢查示例。 – a1ex07

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參數的過程,其中應用程序將通過所有的字段和行分隔符連接起來的數據表中的記錄。該過程將不得不以兩種方式拆分它並形成一個更好的結構,就像由varchar2表形成的記錄表一樣。

+0

示例任何提及PLZ –

+0

當然,我可以添加一個我認爲的例子。你沒有找到解決方案嗎? –

+0

雅如果您有解決方案發布,我沒有找到解決方案。 –

0

以下是將EMPLOYEES中的一行復制到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; 

更多信息

Here是類似的問題。

+0

感謝您的答覆Parado,但我沒有做數據庫表到數據庫表我發送它從我的應用程序執行的過程。 –

相關問題