2017-08-14 86 views
0

我有SQLPLUS格式的腳本。 我要求用戶輸入替代變量的值來執行插入語句。如何強制用戶輸入替代變量的值?

一些替代變量用於強制列,所以

我怎麼能詢問用戶是否替換變量值爲null重新填寫?

如何通過強制用戶輸入相同的替代變量取決於它自己的值本身的值?

或如何強制用戶輸入替代變量的值?

psedu code: 

accept x prompt please enter value for x 
while (&x is null) loop 
     accept x prompt please enter value for x 
end loop 
insert into ... 

是有可能

+1

我不認爲你可以。你可以指定一個數據類型,但我不認爲你可以阻止它爲空。是否強制腳本終止,如果沒有價值提供了一個合適的選擇? (雖然插入無論如何會失敗...) –

回答

1

這是瘋了,但...基於this answer I gave to another question您可以創建一個名爲main.sql這樣的腳本:

accept x prompt please enter value for x 
accept y prompt please enter value for y 
accept z prompt please enter value for z 

set term off verify off 

column script new_value v_script 

select case when '&&x.' is null or '&&y.' is null or '&&z.' is null 
     then 'main' 
     else 'do_insert' 
     end script 
    from dual; 

set term on verify on 

@@&v_script. 

然後創建另一個腳本,稱爲do_insert.sql li柯本:

insert into mytable (a, b, c) values ('&&x.', '&&y.', '&&z.'); 

main.sql腳本將繼續重新運行本身,直到所有的X,Y和Z各自爲NOT NULL - 讓用戶重新輸入他們的所有各一次。一旦全部不爲空,它將運行使用這些值的do_insert.sql

請注意,每次main.sql重新運行時,它都是嵌套調用; SQL開發(例如)失敗,最終如果用戶保持省略值的誤差:

SP2-0309:SQLcl命令程序僅可嵌套到 20.

但實際上的深度,如果你想要一個體面的用戶界面,SQL Plus腳本不是構建它的方法。

+0

遞歸調用,我喜歡開箱即用,絕對是這個創造性的瘋狂答案回答我瘋狂的問題。 ;) 非常感謝 。 –