小编Nav*_*vin的帖子

帮助注册不在内部和内部联接

我有两张桌子.表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.

sql oracle

3
推荐指数
1
解决办法
1万
查看次数

CLOB 字段上的子字符串

我们正在尝试在 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。

sql oracle clob

3
推荐指数
1
解决办法
3万
查看次数

在同一个表上使用插入触发器更新

我有一个在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.

sql oracle triggers

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

oracle ×3

sql ×3

clob ×1

triggers ×1