PLS-00302: говорит, что моя хранимая процедура не объявлена - PullRequest
1 голос
/ 14 мая 2010

Вот где в стеке происходит ошибка:

public static IKSList<DataParameter> Search(int categoryID, int departmentID, string title)
        {
            Database db = new Database(DatabaseConfig.CommonConnString, DatabaseConfig.CommonSchemaOwner, "pkg_data_params_new", "spdata_params_search");
            db.AddParameter("category_id", categoryID);
            db.AddParameter("department_id", departmentID);
            db.AddParameter("title", title, title.Length);

            DataView temp = db.Execute_DataView();

            IKSList<DataParameter> dps = new IKSList<DataParameter>();

            foreach (DataRow dr in temp.Table.Rows)
            {
                DataParameter dp = new DataParameter();
                dp.Load(dr);
                dps.Add(dp);
            }

            return dps;
        }

А вот и текст ошибки:

ORA-06550: line 1, column 38:
PLS-00302: component 'SPDATA_PARAMS_SEARCH' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Описание: необработанное исключение произошло во время выполнения текущий веб-запрос. Пожалуйста, просмотрите трассировку стека для более информация об ошибке и ее возникновении в коде.

Сведения об исключении: System.Data.OracleClient.OracleException: ORA-06550: строка 1, столбец 38: PLS-00302: компонент 'SPDATA_PARAMS_SEARCH' должен быть объявлен ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется

Ошибка источника:

Line 161:            db.AddParameter("title", title, title.Length);
Line 162:
Line 163:            DataView temp = db.Execute_DataView();
Line 164:
Line 165:            IKSList<DataParameter> dps = new IKSList<DataParameter>();

Мой web.config указывает на правильное место и все, поэтому я не знаю, откуда это.

Ответы [ 2 ]

2 голосов
/ 14 июня 2010

во-первых, убедитесь, что пользователь, вызывающий процедуру, имеет права на выполнение процедуры, во-вторых, убедитесь, что пользователь, вызывающий процедуру, может увидеть процедуру либо напрямую, используя имя schemaname.procedurename или имя синонима.procedure, синоним может быть или публичный или частный.

надеюсь, это поможет

0 голосов
/ 01 декабря 2016

Ответ от janbo точный, дай ему голос. Вот скрипт для размещения в ваших БД Развертываниях, чтобы убедиться, что это больше не повторится:

sqlplus @ CreateSynonyms.sql

-- CreateSynonyms.sql : Creates synonyms on XYZ_USER for all packages that don't already have synonyms

spool CreateSynonyms.log

DECLARE
  owner        VARCHAR2(20) := 'XYZ';
  currentUser  VARCHAR2(20);
  executeLine  VARCHAR2(200);
BEGIN
  -- Get the user we're currently executing as
  SELECT sys_context('USERENV', 'SESSION_USER') INTO currentUser FROM dual;

  FOR x IN (SELECT p.table_name FROM user_tab_privs p
              WHERE p.owner = owner
                AND p.privilege = 'EXECUTE'
                AND p.table_name NOT IN (
                  SELECT table_name FROM user_synonyms
                    WHERE table_owner = owner
                )
            ) LOOP
    executeLine := 'CREATE OR REPLACE SYNONYM ' || x.table_name || ' FOR ' || owner || '.' || x.table_name;
    DBMS_OUTPUT.PUT_LINE(executeLine);
    EXECUTE IMMEDIATE executeLine;
  END LOOP;
END;
/   
spool off
...