我有两张桌子.表1和表2
表格1
id tid
1 100
2 200
3 300
Run Code Online (Sandbox Code Playgroud)
表2
tid name
100 A
200 B
Run Code Online (Sandbox Code Playgroud)
我想从表1中取出记录的id,而不是表2中的tid.
我的输出应该是这样的.
Table1.id
3
Run Code Online (Sandbox Code Playgroud)
为此我写了以下查询但是花了太多时间.由于两个表都有更多的记录.
请帮助我如何编写查询,以便花费更少的时间.
select id from Table1 where tid not in (select tid from Table2)
select a.id from Table1 a inner join Table2 b on a.tid<>b.tid
Run Code Online (Sandbox Code Playgroud)
TIA.
我们正在尝试在 CLOB 字段中应用子字符串函数来修剪前 4000 个字符。我们收到以下错误消息。
以下是我们正在使用的查询:
select
cast(substr(field_name,1,4000) as varchar(4000))
from table_name;
Run Code Online (Sandbox Code Playgroud)
错误报告:
SQL 错误:ORA-22835:缓冲区太小,无法进行 CLOB 到 CHAR 或 BLOB 到 RAW 的转换(实际:8000,最大:4000)
22835.00000 - “缓冲区太小,无法进行 CLOB 到 CHAR 或 BLOB 到 RAW 的转换(实际:%s ,最大值:%s)"
*原因:尝试将 CLOB 转换为 CHAR 或将 BLOB 转换为 RAW,其中 LOB 大小大于 CHAR 和 RAW 类型的缓冲区限制。请注意,如果字符长度语义对列有效,则宽度以字符为单位报告,否则宽度以字节为单位报告。
*操作:执行以下操作之一 1. 在执行转换之前缩小 LOB,例如,在 CLOB 上使用 SUBSTR 2. 使用 DBMS_LOB.SUBSTR 将 CLOB 转换为 CHAR 或将 BLOB 转换为 RAW。
我有一个在tableA上写一个插入触发器.它将使用相同的表但不同的列执行更新.这样做我收到错误.我的触发器是
create or replace trigger trigger_A
after insert on table_A
begin
update table_A set col1=1 where col1 is null;
end;
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序将执行col2单独插入,col1将保持为null.因此,一旦插入行,我的触发器将为col1赋值.但是当插入一行时,我收到错误说"触发器失败并且无效".这该怎么做.TIA.