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