0

我正在尝试创建一个由可变日期过滤的表,具体取决于当前日期。尽管我对 Oracle 和 PL/SQL 还很陌生,但我已经成功编写了许多“高级初学者”PL/SQL 过程。但我想知道我是否采用了正确的方法使用变量来实现我的目标。我想做的简化版本:

Create Table myTable as Select * from oldTable where effective_date is > variabledate

也许在查询本身中使用 case 语句而不是使用 case 语句创建变量然后在查询中使用该变量会更好地实现这一点。但我认为变量会更精简,更容易阅读,并且可能运行得更快。

我用谷歌搜索过,但我发现的大部分内容都试图告诉我如何编写它,而不是我的方法是否最有效。

任何想法/建议都非常感谢!

4

1 回答 1

0

尝试在您的过程中使用动态 SQL。

CREATE PROCEDURE proc_name (variabledate DATE) IS

   v_sql_stmt VARCHAR2(1000);

 BEGIN

   v_sql_stmt = 'Create Table myTable as Select * from oldTable where effective_date is > :bind_variabledate';

   EXECUTE IMMEDIATE  v_sql_stmt USING variabledate;

 END; 

PS。不建议使用动态SQL,因为它容易发生SQL注入并且不容易调试,你真的需要知道你在使用它的时候是什么。话虽如此,它是在运行时处理数据时使用的强大功能。

于 2015-10-26T18:35:53.180 回答