SQL存储过程未知的子句

时间:2011-06-16 20:33:58

标签: sql oracle

有没有办法编写一个SQL存储过程,直到运行时才能知道where子句中包含多少个参数以及那些目标列?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以在存储过程中构建动态sql然后执行它。我不建议这样做,但这是一个选择。

如果你选择这条路线,请务必仔细阅读this article

更新:

免责声明 - 上述文章特定于SQL Server。其中一些可能仍然适用(我不太了解Oracle以某种方式说出来)。

我建议您查看有关动态SQL的Oracle特定信息的this article

答案 1 :(得分:1)

如果你有很多可以搜索的列,那么构建动态sql语句会更容易但是......你必须担心sql注入

OR

如果您知道将要搜索的列,请为每个列创建一个可选参数,并为其指定默认值null

编辑:在sql server中添加了示例,但可以轻松移植到oracle

CREATE PROCEDURE dbo.test
(
    @col1   varchar(50) = null,
    @col2   int = null,
    @col3   datetime = null
)
AS

    SELECT  col1, col2, col3
    FROM    someTable
    WHERE   (@col1 IS NULL OR col1 = @col1)
    AND     (@col2 IS NULL OR col2 = @col2)
    AND     (@col3 IS NULL OR col3 = @col3)