2016-03-07 205 views
0

我熟悉MSSQL並在查詢中使用了一個參數,但我不知道如何在PL/SQL內做到這一點。帶參數的PL/SQL查詢

DECLARE 
LSITEID NUMBER := 100001; 

BEGIN 

SELECT * from invoicehead ih 
JOIN sitemaster sm on sm.SITEIID = ih.SITEIID 
JOIN invoiceline il on il.invoiceIID = ih.invoiceIID 
WHERE 
ih.StartDate BETWEEN '2015-12-01' AND '2016-03-07' 
AND SITEIID IN (LSITEID) 


END; 

現在我正在測試這個在Pl/SQL中。但基本上,我會通過參數MSSQL Linked ServerOPENQuery傳遞查詢。

如何在PL/SQL中使用參數運行上述查詢?

+0

[OPENQUERY](https://msdn.microsoft.com/en-us/library/ms188427.aspx)似乎不容許參數,所以大概你必須構造嵌入變量的語句?你的PL/SQL塊沒有選擇任何東西,因此無效,但我不確定你真的想要PL/SQL。您也不應該在隱式日期轉換或NLS設置上進行回覆;看起來像你可以使用日期文字,因爲你也必須嵌入這些。 –

回答

0

還有很多其他資源可用於查找答案,例如here (Tutorialspoint)或特別是here (plsql-tutorial)。但也許我錯過了你的觀點。

爲了不停留在僅僅是引用鏈接,您的查詢看起來是這樣的:

DECLARE 
    LSITEID integer; 

BEGIN 
    LSITEID := 100001; 
    -- dostuff 
END; 

有兩點需要注意:首先,在申報部分(因爲我已經學會了),你應該避免分配值。其次,如果你打算通過不同的參數,你可以/應該使用一個程序。

0

在PL/SQL中,您只需使用參數的名稱。在以下示例中,參數爲P_VALUE,note選擇語句表示where dummy = p_value

DECLARE 
    FUNCTION dummycount (p_value IN DUAL.dummy%TYPE) 
     RETURN INTEGER 
    AS 
     l_ret INTEGER; 
    BEGIN 
     SELECT COUNT (*) c 
     INTO l_ret 
     FROM DUAL 
     WHERE dummy = p_value; 

     RETURN l_ret; 
    END dummycount; 
BEGIN 
    DBMS_OUTPUT.put_line ('A: ' || dummycount (p_value => 'A')); 
    DBMS_OUTPUT.put_line ('X: ' || dummycount (p_value => 'X')); 
END; 

這導致下面的輸出:

A: 0 
X: 1