oracle - Oracle 使用拒绝无限条款
问题描述
有人可以修改下面的 INSERT 代码以使用拒绝无限制条款并将错误记录在 err$_t
当我尝试实现以下内容时,我遇到了语法错误。可以这样使用子句吗?
create table t(val1 NUMBER(4 ) );
ALTER TABLE t
ADD ( CONSTRAINT t_pk
PRIMARY KEY (val1));
exec dbms_errlog.create_error_log ( 't' );
INSERT INTO T(val1)
WITH cte AS
(
SELECT 1 from dual
UNION ALL
SELECT 1 from dual
)
SELECT * from cte;
解决方案
log errors
在语句末尾添加子句INSERT
:
SQL> create table t(val1 number primary key);
Table created.
SQL> exec dbms_errlog.create_error_log ('t');
PL/SQL procedure successfully completed.
SQL> insert into t(val1)
2 with cte as
3 (
4 select 1 from dual
5 union all
6 select 1 from dual
7 )
8 select * from cte
9 log errors into err$_t ('TEST')
10 reject limit unlimited;
1 row created.
SQL> select count(*) rows_inserted from t;
ROWS_INSERTED
-------------
1
SQL> select count(*) rows_with_errors from err$_t;
ROWS_WITH_ERRORS
----------------
1
SQL>
请注意我是如何使用 SQL*Plus 来演示代码的。该程序不适合开发代码,但有助于创建简单、可重现的测试用例。几乎每个 Oracle 开发人员都可以使用该工具,它准确地显示了每个命令的运行方式,包括完整的错误消息。
(为您的问题添加语法突出显示的一种快速方法是选择代码并单击“代码示例”按钮,即两个大括号。)
推荐阅读
- azure - Azure 数据工厂查找活动无法执行 CosmosDb 查询“跨分区查询仅支持聚合的‘VALUE’。”
- android - 如何获取 ussd measage 字符串值?
- node.js - 如何通过多对多关系实体ID查找实体
- assembly - GRUB 如何在引导过程中将内核参数传递给内核
- c++ - C++ 同步和原子软件事务内存
- javascript - 如何在 ReactJS 中单击按钮重定向
- javascript - 由于类型不正确,Prisma 更新功能失败
- google-cloud-build - 修补 CloudBuild 触发器
- javascript - 在JavaScript中的对象函数中删除对象的引用本身
- json - 通过控制器传递 json