sql - 如何在pl/sql中使用动态sql?
问题描述
我以以下 pl/sql 过程为例(我的过程要大得多,但我的问题是关于动态 sql)。我的问题是如何在 SQL_STMT 中使用变量 V_DATE:
CREATE OR REPLACE PROCEDURE TEST (DATE_A IN DATE) IS
V_DATE DATE;
SQL_STMT VARCHAR2(4000);
BEGIN
V_DATE = DATE_A;
SQL_STMT = 'CREATE TABLE TABLE_1 AS
SELECT *
FROM TABLE_2 A
WHERE A.DATE_FROM = V_DATE';
EXECUTE IMMEDIATE SQL_STMT;
COMMIT;
END TEST;
/
解决方案
您需要连接该值。(通常绑定变量是个好主意,但它们不能与 DDL 一起使用。)
create or replace procedure test
( date_a in date )
as
sql_stmt varchar2(4000);
begin
sql_stmt :=
'create table table_1 as select * from table_2 a '||
'where a.date_from = date '''||to_char(date_a,'YYYY-MM-DD')||'''';
dbms_output.put_line(sql_stmt);
execute immediate sql_stmt;
end test;
生成的语句将类似于:
create table table_1 as select * from table_2 a where a.date_from = date '2021-03-27'
请注意,这只会工作一次,因为之后表已经存在,因此create table
语句将失败,但这只是演示语法的示例。
推荐阅读
- multidimensional-array - 如何为嵌套数组编写 JOLT Spec?
- node.js - npm 卡在获取一些包上,使用 --verbose 后,CLI 中没有任何反应
- ios - UIImagePickerController 允许选择方形图像。但是我怎样才能使它成为 16:9?
- r - 使用函数在ggplot中手动着色
- c# - 如何仅在 Xamarin Forms XAML 中设置左边距?
- gnuplot - 语法错误“数据块名称必须后跟 << EODmarker”
- python - 嵌入C++时如何链接正确的python版本?
- coq - 两个参数的结构递归
- angular - PrimeNG Turbotable 全部展开
- android - Kotlin - 对象表达式中的继承