2013-07-23 62 views
0

是否可以將此PL-SQL代碼轉換爲unix代碼?在Unix中轉換PLSQL腳本?

declare 
    tipE varchar(8) := 'TEST'; 
begin 
insert into TABLENAME VALUES (values); 
    if tipExec = 'TEST' then 
     dbms_output.put_line('INSERT is ok; called ROLLBACK in '' TEST'); 
     ROLLBACK; 
    end if; 

    exception 
    when DUP_VAL_ON_INDEX then 
     if tipE = 'TEST' then 
     raise_application_error(-9999, 'DUPKEY in'' TEST'); 
     else 
     raise; 
     end if; 
    when others then 
     raise; 
end; 

可能嗎?我的意思是我有一個參數「test」或「prod」。我必須做一個插入,如果這個插入有一個DUPKEY我必須寫在日誌中。否則,我會在日誌中寫入「INSERT is ok」。而上面的代碼幾乎是相同的概念,但在oracle中。我需要這個在unix shell中。謝謝。

+0

'make an insert'其中 - 您的意思是調用SQL * Plus從shell腳本執行插入操作,並將成功/失敗消息記錄到文件中? (爲什麼「當其他人再提高」?這似乎毫無意義)。 –

+0

'「從shell腳本中執行插入操作,並將成功/失敗消息記錄到文件中?」是! –

+0

如果可能,從此代碼開始..這是我想要的,但在ksh中 –

回答

0

創建你的程序上面爲一個名爲PL/SQL程序,然後你可以很容易地剛剛從sqlplus中通過Unix shell腳本這樣調用它:

sqlplus -s $USERPASS << sqlend 
    whenever sqlerror exit 1 
    set heading off 
    exec your_function('$example_variable'); 
sqlend 

...其中$爲userpass爲登錄機制/用戶&密碼。如果你不使用任何函數參數,只需刪除括號中的那一位。

看一看該Oracle教程如何從你的PLSQL代碼片段創建過程爲例: http://www.oracle.com/technetwork/issue-archive/2011/11-mar/o21plsql-242570.html

擔任首發,你的程序應該是這個樣子的(未測試):

CREATE OR REPLACE PROCEDURE your_function 
IS 
    tipE varchar(8) := 'TEST'; 
begin 
insert into TABLENAME VALUES (values); 
    if tipExec = 'TEST' then 
     dbms_output.put_line('INSERT is ok; called ROLLBACK in '' TEST'); 
     ROLLBACK; 
    end if; 

    exception 
    when DUP_VAL_ON_INDEX then 
     if tipE = 'TEST' then 
     raise_application_error(-9999, 'DUPKEY in'' TEST'); 
     else 
     raise; 
     end if; 
    when others then 
     raise; 
end your_function; 
+0

是的,這是一個很好的建議。現在我看看。 –

+0

但我不明白如何通過shell腳本調用該過程。 (ksh unix shell)。我必須寫什麼來調用它?因爲我的街區是一個「無爭議的街區」,而且你知道,它沒有名字。我從來沒有與這種類型的塊抱歉。 –

+0

我已經添加了一些更多,這應該讓你更清楚你需要做什麼。 – fig