0
         Connection connection = DriverManager.getConnection(DB_URL,userName,passWord);
         ArrayDescriptor des = ArrayDescriptor.createDescriptor("ARRAY_TABLE", connection);
         ARRAY array_to_pass = new ARRAY(des,connection,ssoIDs);
         CallableStatement cs = connection.prepareCall("{ call TEST1 (?,?,?,?,?) }");
         cs.setArray(1, array_to_pass);
        // cs.registerOutParameter(2,sdate);
         cs.setString(2, sdate);
         cs.setString(3, edate);
         //st.registerOutParameter(3,OracleTypes.ARRAY,"SchemaName.ARRAY_INT");
         cs.registerOutParameter(4, OracleTypes.ARRAY, "ARRAY_TABLE");
         cs.registerOutParameter(5, OracleTypes.ARRAY, "ARRAY_TABLE");
         cs.execute(); // works fine . 

一方

            String[] aIdtobePassed = actorid.toArray(new String[actorid.size()]);
            String[] pIdtobePassed=processid.toArray(new String[processid.size()]);


            ArrayDescriptor desforActorId = ArrayDescriptor.createDescriptor("ARRAY_TABLE", connection);
            ARRAY actorArray_to_pass = new ARRAY(desforActorId,connection,aIdtobePassed);
            ArrayDescriptor desforProcessId = ArrayDescriptor.createDescriptor("ARRAY_TABLE", connection);
            ARRAY processArray_to_pass = new ARRAY(desforProcessId,connection,pIdtobePassed);


            CallableStatement csforST= connection.prepareCall("{ call TEST2 (?,?,?,?,?,?,?,?) }");
            csforST.setArray(1, actorArray_to_pass);
         //   csforST.setString(1, "as");
            csforST.setArray(2, processArray_to_pass);
            csforST.registerOutParameter(3, OracleTypes.ARRAY, "ARRAY_TABLE");
            csforST.registerOutParameter(4, OracleTypes.ARRAY, "ARRAY_TABLE");
            csforST.registerOutParameter(5, OracleTypes.ARRAY, "ARRAY_TABLE");
            csforST.registerOutParameter(6, OracleTypes.ARRAY, "ARRAY_TABLE");
            csforST.registerOutParameter(7, OracleTypes.ARRAY, "ARRAY_TABLE");
            csforST.registerOutParameter(8, OracleTypes.ARRAY, "ARRAY_TABLE");
            csforST.execute(); // do not works 

Test1 はあるスキーマに属し、Test2 は別のスキーマに属します。

エラーメッセージは

状態: 65000 メッセージ: ORA-06550: 行 1、列 7: PLS-00201: 識別子 'TEST2' を宣言する必要があります ORA-06550: 行 1、列 7: PL/SQL: ステートメントは無視されました

スキーマがデータベースに接続されている SQL 開発者を使用しています。これは、接続されているスキーマに似たプラグ シンボルが表示されるためです。しかし、なぜそれがうまくいかなかったのかわかりません。助けてください。

4

1 に答える 1

0

Finally found why i am getting the error like this . The username and password what i am trying to make the connection with do not have privilige to access the second schema .

Since i am calling the proc of different schemas by just their name alone "{call a(?,?)}". It refers to the schema of first one alone and hence throws the error that the other proc is not present .

On making a new connection with userName and password in order to call the second schema . It works fine.

于 2012-12-06T08:56:56.080 に答える