При вызове хранимой процедуры двух разных схем хранимая процедура второй не выполняется

         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, где схема подключена к базе данных, потому что я вижу символ штекера на схеме, которая напоминает, что она подключена. Но я не уверен, почему это не сработало, у кого-нибудь есть идеи, пожалуйста, помогите?


person Sathish    schedule 05.12.2012    source источник


Ответы (1)


Наконец-то нашел, почему я получаю такую ​​​​ошибку. Имя пользователя и пароль, с которыми я пытаюсь установить соединение, не имеют права доступа ко второй схеме.

Поскольку я вызываю процесс разных схем только по их имени «{call a (?,?)}». Он ссылается только на схему первого и, следовательно, выдает ошибку, что другой процесс отсутствует.

При создании нового соединения с именем пользователя и паролем для вызова второй схемы. Это работает нормально.

person Sathish    schedule 06.12.2012