问题描述
嗨,问汤姆团队,
下面的select查询对我来说工作正常,但是无法使用insert语句插入结果。,请给我一些建议
现在,上述查询的输出结果正在尝试插入到表中
所以我写了下面的查询插入这个输出到表T1,但得到错误:
Insert statement tried 1
Error for above insert:
ORA-00904: "T11": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 12 Column: 8
Insert statement tried 2
Error for above insert option 2
ORA-00928: missing SELECT keyword
00928. 00000 - "missing SELECT keyword"
*Cause:
*Action:
Error at Line: 12 Column: 1
下面的select查询对我来说工作正常,但是无法使用insert语句插入结果。,请给我一些建议
WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER IS BEGIN IF P_A1 = 'A' THEN RETURN 10; ELSE RETURN 100; END IF; END; SELECT T11('A1') FROM DUAL;复制
现在,上述查询的输出结果正在尝试插入到表中
CREATE TABLE T1 (A1 NUMBER);复制
所以我写了下面的查询插入这个输出到表T1,但得到错误:
Insert statement tried 1
INSERT INTO T1 (A1) WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER IS BEGIN IF P_A1 = 'A' THEN RETURN 10; ELSE RETURN 100; END IF; END; SELECT T11('A1') FROM DUAL;复制
Error for above insert:
ORA-00904: "T11": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 12 Column: 8
Insert statement tried 2
WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER IS BEGIN IF P_A1 = 'A' THEN RETURN 10; ELSE RETURN 100; END IF; END; INSERT INTO T1 (A1) SELECT T11('A1') FROM DUAL;复制
Error for above insert option 2
ORA-00928: missing SELECT keyword
00928. 00000 - "missing SELECT keyword"
*Cause:
*Action:
Error at Line: 12 Column: 1
专家解答
您需要DML的WITH_PLSQL提示
SQL> WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER IS 2 BEGIN 3 IF P_A1 = 'A' THEN RETURN 10; 4 ELSE 5 RETURN 100; 6 END IF; 7 END; 8 SELECT T11('A1') FROM DUAL; 9 / T11('A1') ---------- 100 1 row selected. SQL> SQL> CREATE TABLE T1 (A1 NUMBER); Table created. SQL> SQL> INSERT INTO T1 (A1) 2 WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER 3 IS 4 BEGIN 5 IF P_A1 = 'A' THEN RETURN 10; 6 ELSE 7 RETURN 100; 8 END IF; 9 END; 10 SELECT T11('A1') FROM DUAL; 11 / WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER * ERROR at line 2: ORA-32034: unsupported use of WITH clause SQL> SQL> INSERT /*+ WITH_PLSQL */ INTO T1 (A1) 2 WITH FUNCTION T11 (P_A1 VARCHAR2) RETURN NUMBER 3 IS 4 BEGIN 5 IF P_A1 = 'A' THEN RETURN 10; 6 ELSE 7 RETURN 100; 8 END IF; 9 END; 10 SELECT T11('A1') FROM DUAL; 11 / 1 row created.复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1445次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
878次阅读
2025-03-17 11:33:53
RAC 19C 删除+新增节点
gh
538次阅读
2025-03-14 15:44:18
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
493次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
425次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
365次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
311次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
278次阅读
2025-04-08 09:12:48
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
266次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
264次阅读
2025-03-19 14:41:51