2011-04-23 39 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