oracle - 如何在 oracle 的插入查询中使用转义符号?
问题描述
请考虑这个场景
declare
lv_sql varchar(4000);
lv_sql1 varchar(4000);
begin
lv_sql1 := 'select case_id from tgt where excluded =''N''';
lv_sql := 'insert into sample values ('||'''select count(1) from ( '||lv_sql1||')'')';
execute immediate (lv_sql);
end;
现在,如果我执行这个块,那么它将在 oracle 中引发 Missing COMMA 的错误。
解决方案
这里有两个问题;第一个是关于VALUES
关键字的:
SQL> insert into aTable values (select count(*) from dual);
insert into aTable values (select count(*) from dual)
*
ERROR at line 1:
ORA-00936: missing expression
SQL> insert into aTable (select count(*) from dual);
1 row created.
第二个是你缺少括号:
SQL> select count(*) from select 1 from dual;
select count(*) from select 1 from dual
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> select count(*) from (select 1 from dual);
COUNT(*)
----------
1
例如:
SQL> select * from aTable;
no rows selected
SQL> declare
2 lv_sql1 varchar2(100);
3 lv_sql varchar2(100);
4 begin
5 lv_sql1 := 'select 1 from dual';
6 lv_sql :='insert into aTable (select count(1) from (' ||lv_sql1 || ') )';
7 --
8 execute immediate lv_sql;
9 end;
10 /
PL/SQL procedure successfully completed.
SQL> select * from aTable;
N
----------
1
SQL>
像你这样的桌子:
SQL> create table tgt(case_id, excluded) as (select 'xxx', 'N' from dual);
Table created.
SQL> create table sample(n number);
Table created.
SQL> declare
2 lv_sql varchar(4000);
3 lv_sql1 varchar(4000);
4 begin
5 lv_sql1 := 'select case_id from tgt where excluded =''N''';
6 lv_sql := 'insert into sample (select count(1) from ( '||lv_sql1||'))';
7 execute immediate (lv_sql);
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> select * from sample;
N
----------
1
推荐阅读
- c# - 错误登录时如何避免锁定UI?
- python - 两个相似部分的二维相关性
- python - 我将 python 对象传递给模板(使用 jinja),它不适用于一个模板,但适用于其他模板
- r - ggplot:as.Date.numeric(value) 中的错误:必须提供“原点”
- c# - httpwebrequest 201 创建 c# 表单如何从服务器获取创建资源的位置
- java - Eclipse 中的项目级别“Java 编译器”和 Windows 首选项级别“Java”->“编译器”有什么区别?
- asp.net - FileNotFoundException:无法加载文件或程序集“System.Net.Http.WebRequest”
- python - 无法导入 matplotlib.pyplot 'Nonetype' 对象不可迭代
- powershell - 使用 powershell 和任务计划程序 COM-Object 读取 csv 文件以创建从事件 id 触发的任务
- java - Jasper 报告作为 Java 应用程序的一部分