2013-03-17 3 views
0

Мне нужно внести изменения в хранимую процедуру Oracle, которая имеет следующие строки.Что означают операторы: и '

 InsStmt = 'INSERT INTO EMPLOYEE (Emp_cd, Emp_lst_nm, Emp_fst,nm) VALUES 
       (:Emp_cd, :Emp_lst_nm, :Emp_fst_nm);'; 
    varExec :=' 
    DECLARE 
     var1 VARCHAR2(100); 
    BEGIN 
     var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm; 
     '||InsStmt||' 
    END;'; 
    EXECUTE IMMEDIATE varExec USING ip_param_cd, ip_param_lnm, ip_param_fnm; 

У меня есть только базовое понимание хранимых процедур Oracle. После некоторых исследований выяснилось, что || оператор - для конкатенации строк.

Но я до сих пор интересно, что же ниже утверждение означает,

var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm; 
     '||InsStmt||' 

Я прошел через учебник по http://docs.oracle.com/cd/B28359_01/appdev.111/b28843/tdddg_procedures.htm#CIHGDECD, но не смогли найти какой-либо помощи.

+1

это выдержка из более крупного изображения, нам нужен весь код. – Sebas

+0

обновлен с полным кодом – Srijit

+0

Это бессмысленный фрагмент кода. Нет смысла просить нас угадать намерения автора. Все, что вы можете сделать, это спросить их или кого бы вы ни потребовали изменить. Назначение VAR1 бессмысленно, поскольку оно (по-видимому) не используется нигде. Возможно, он предназначен для аудита или отладки? – APC

ответ

2

Вне контекста триггера столбец : используется для связывания переменных внутри оператора.

Например:

EXECUTE IMMEDIATE 'UPDATE mytable SET age = 25 WHERE age = :1' 
    USING IN localVarAge; 

В этом случае значение :1 будет заменено на значение localVarAge. Порядок переменных ':' отображается в подготовленном выражении, а не в их фактических ярлыках.

В вашем коде явно отсутствует кусок, эта часть var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm; должна быть в пределах кавычек. Это имело бы смысл, так как у вас есть сразу после этого заключительная цитата и конкатенация.

+0

Спасибо, что помогли. Фактически они создают динамический оператор процедуры и выполняют его. Все еще не понимаю, что такое использование var1; – Srijit

+0

О, я думаю, они не используют его! Вероятно, остался последний код ... Например, для dbms_outputting перед вставкой – Sebas

+0

Я думаю, что мы можем настроить эту процедуру, вы должны открыть другой вопрос со всем кодом для оптимизации производительности. Думаю, это не оптимально сейчас – Sebas

Смежные вопросы