2011-04-23 80 views
2

我在php(數據數組)中有一個post數據,我需要將它傳遞給oracle過程,它接受table%ROWTYPE。我怎樣才能讓一張數據表通過?oracle post data

下面是代碼示例:

CREATE OR REPLACE PACKAGE restoraunt IS 

    TYPE recipe_table IS TABLE OF recipes%ROWTYPE; 
    PROCEDURE upsert_recipes(recipes recipe_table); 

END restoraunt; 

CREATE OR REPLACE PACKAGE BODY restoraunt IS 

    PROCEDURE upsert_recipes(recipes recipe_table) IS 
    BEGIN 
    DBMS_OUTPUT.PUT_LINE('123'); 
    END; 

END restoraunt; 

正如你所看到的,我需要通過recipe_table對象。我怎樣才能使用PHP? (我知道,它應該是某種pl/sql代碼,但我不明白)

回答

0

您不能將%rowtype的表傳遞給Oracle過程。

然而,你可以傳遞一個對象類型的表:

CREATE TYPE recipe_obj AS OBJECT 
    (recipe_id NUMBER 
    , recipe_text VARCHAR2(200) 
    ); 

CREATE TYPE recipe_tbl AS TABLE OF recipe_obj; 

CREATE OR REPLACE PACKAGE restoraunt IS 
    PROCEDURE upsert_reciptes (recipes recipe_tbl); 
END restoraunt; 

CREATE OR REPLACE PACKAGE BODY restoraunt IS 
    PROCEDURE upsert_recipes (recipes recipe_tbl) IS 
    BEGIN 
     dbms_output.put_line('123'); 
    END; 
END restoraunt; 

但是,我知道這個從Oracle之外傳遞到Oracle的唯一途徑是從Java。

如果使用Oracle的JDeveloper Suite,則可以在創建對象類型和對象表後自動生成必需的Java類。然後,您可以使用Oracle的OJDBC庫通過OracleCallableStatement將Java對象傳遞到Oracle中。一本很好的參考書是R. M. Menon的Expert Oracle JDBC Programming