Используя python cx_ Oracle, как я могу вызвать DBMS_METADATA.SET_TRANSFORM_PARAM, который имеет несколько объявлений? - PullRequest
1 голос
/ 04 марта 2020

Вот вызов и ошибка, которую я сейчас получаю:

cursor.callproc('DBMS_METADATA.SET_TRANSFORM_PARAM', ['DBMS_METADATA.SESSION_TRANSFORM', 'STORAGE', 'false'])
cx_Oracle.DatabaseError: ORA-06550: line 1, column 7:
PLS-00307: too many declarations of 'SET_TRANSFORM_PARAM' match this call
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1 Ответ

1 голос
/ 07 марта 2020

Вопрос связан с использованием цитат. Синтаксис для процедуры DBMS_METADATA.SET_TRANSFORM_PARAM

DBMS_METADATA.SET_TRANSFORM_PARAM (
   transform_handle   IN NUMBER,
   name               IN VARCHAR2,
   value              IN VARCHAR2|IN BOOLEAN DEFAULT TRUE|IN NUMBER, 
   object_type        IN VARCHAR2 DEFAULT NULL);

последний параметр (object_type) явно указывать не нужно, поскольку он имеет значение NULL по умолчанию.

предпоследний параметр (value) может иметь три параметра для типа данных. Кажется, это должно быть как BOOLEAN. Итак, удалите кавычки вокруг false.

и, наконец, первый параметр (transform_handle) также считается цифрой c. Итак, удалите кавычки и здесь.

В результате вызовите процедуру как

cursor.callproc('DBMS_METADATA.SET_TRANSFORM_PARAM', 
                [DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', false]);
...