2013-12-13 26 views
1

下面的插入代碼在SQL開發人員中工作正常,但在sql plus中失敗。使用pl/sql匿名塊更新表中的列

create table abc(metric varchar2(10), line number(2), text varchar2(2000)); 

insert into abc 
(metric, line, text) 
values('abc', 1, q'#declare 
    k_sid  constant varchar2(100) := upper(sys_context('USERENV', 'DB_NAME'));  
    -- Cusor-FOR-loop over all spy_configs for k_sme ... 
    for r_stmt in (select k_sid as instance 
         ,k_sme as metric 
         ,key 
         ,value 
         ,'ERROR - spfile-parameter: '||key||' must be set to: '||value||' but is not - please check and change it !!!' as text 
        from bmw_system.bmw_spy_conf 
    raise_application_error (-20001, ' - '||sqlcode||' - '||sqlerrm,true); 
end;#') 

是否有任何解決方案通過SQL加參數。任何指針將不勝感激。

問候, 和Sandeep

+0

「失敗的SQL加」 嗯? –

+0

一種選擇是將命令保存在文件中,並使用sql plus從文件中執行sql:http://www.techonthenet.com/oracle/questions/script.php –

+0

我從來沒有見過'q' #....#''在之前使用的INSERT值列表中顯示的字符串格式。 –

回答

2

嘗試:

set sqlt/
insert into abc 
(metric, line, text) 
values('abc', 1, q'[declare 
    k_sid  constant varchar2(100) := upper(sys_context('USERENV', 'DB_NAME'));  
    -- Cusor-FOR-loop over all spy_configs for k_sme ... 
    for r_stmt in (select k_sid as instance 
         ,k_sme as metric 
         ,key 
         ,value 
         ,'ERROR - spfile-parameter: '||key||' must be set to: '||value||' but is not - please check and change it !!!' as text 
        from bmw_system.bmw_spy_conf 
    raise_application_error (-20001, ' - '||sqlcode||' - '||sqlerrm,true); 
end;]') 
/
set sqlt ; 

http://docs.oracle.com/cd/B28359_01/server.111/b31189/ch12040.htm#i2498515

SET SQLT [ERMINATOR] {; | c | ON | OFF}

設置用於結束PL/SQL塊或SQL語句的腳本或數據條目的字符,以執行該腳本並將其加載到緩衝區中。

它不能是字母數字字符或空格。 OFF表示SQL * Plus不識別命令終止符;通過輸入空行或斜線(/)來終止SQL命令。如果SQLBLANKLINES設置爲ON,則必須使用BLOCKTERMINATOR來終止SQL命令。 ON將終止符重置爲默認分號(;)。