2016-03-18 2 views
1

Я пытаюсь передать имя таблицы и имя столбца хранимой процедуры в оракула, но это дает мне следующую ошибку: table or view does not existPassing имя таблицы и имя столбца динамически/SQL хранимой процедуры PL

Ниже приведен код:

create or replace procedure jz_dynamic_sql_statement 
    (p_table_name in varchar2, 
    p_col1_name  in varchar2, 
    p_check_result out integer) 

    as 

    v_error_cd   est_runtime_error_log.error_cd%type; 
    v_error_msg   est_runtime_error_log.error_msg%type; 
    v_sql    varchar2(1024); 
    v_result   number(10); 

    begin 
    v_result := 0; 
    v_sql  := 'select count(*) from ' || p_table_name ||' WHERE COLUMNNAME=' || p_col1_name; 


    execute immediate v_sql into v_result; 
    p_check_result := v_result; 

    end; 
+1

Что толку об этом? Стол не существует. –

+0

Я имею в виду, что у меня уже есть таблица. – akaminko

+0

Предложение where не имеет смысла, если вы не пытаетесь запутать имена столбцов базы данных в сообщении. – Andrew

ответ

1

Если ошибка возвращается, говорит таблица не существует, то это означает, что таблица вы передаете не существует или пользователь, что процедура работает под управлением не может получить к нему доступ.

Вы можете добавить оператор dbms_output.put_line, чтобы отобразить запрос, который вы строите, а затем попробуйте запустить его самостоятельно, прежде чем пытаться выполнить немедленное выполнение. Затем вы знаете, какие ошибки вам нужно исправить.

dbms_output.put_line('query : '||v_sql); 

Обязательно включите dbms_output.

Кроме того, из того, что, похоже, вы пытаетесь сделать, вам необходимо передать имя столбца И значение столбца. Если таблицы, которые вы запрашиваете, будут ВСЕГДА иметь имя столбца «COLUMNNAME».

Попробуйте это:

v_sql  := 'select count(*) from ' || p_table_name ||' WHERE COLUMNNAME=''' || p_col1_name|| ''''; 
+0

это хорошо работает v_sql: = 'select count (*) from' || p_table_name || ''; но когда я использую clasue с ​​именем столбца, тогда он дает следующую ошибку выше. – akaminko

+0

ли столбец, который вы пытаетесь запросить, имеет столбец «COLUMNNAME»? – mjf200

+0

Да. у него есть столбец «COLUMNNAME» – akaminko