带参数的PL / SQL查询

时间:2016-03-07 16:35:22

标签: sql oracle plsql

我熟悉MSSQL并在查询中使用参数,但我不确定如何在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 Server OPENQuery中的参数传递查询。

如何使用参数?

在PL / SQL中运行上述查询

2 个答案:

答案 0 :(得分:1)

还有很多其他资源可以找到答案,例如: here (Tutorialspoint)或具体here (plsql-tutorial)。但也许我错过了你的观点。

为了不仅仅引用链接,您的查询可能如下所示:

DECLARE
  LSITEID integer;

BEGIN
  LSITEID := 100001;
  -- dostuff
END;

有两点需要注意:首先,在声明部分(我已经学会了)你应该避免赋值。其次,如果您打算传递不同的参数,您可以/应该使用一个过程。

答案 1 :(得分:0)

在PL / SQL中,您只需使用参数的名称。在以下示例中,参数为P_VALUE,注意select语句为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