使用oracle存储过程检查输入参数的空值

时间:2010-07-08 04:58:06

标签: oracle9i

我正在使用oracle准备存储过程。我使用同一个表的多个内部联接,其中在每个内部联接中检查输入参数值。如果输入参数为null,我想消除特定的内连接

1 个答案:

答案 0 :(得分:3)

您需要使用动态SQL为参数构建适当的查询,如下所示:

PROCEDURE myproc (p1 VARCHAR2) IS
   l_sql LONG;
   l_cursor SYS_REFCURSOR;
BEGIN
   l_sql := 'SELECT a, b, c FROM table1';
   IF p1 IS NOT NULL THEN
      l_sql := l_sql || ' JOIN table2 ON table2.x = table1.x';
   END IF;
   l_sql := l_sql || ' WHERE table1.y = :bind1';
   OPEN l_cursor FOR l_sql USING 123;
   ...
END;