帮我调整以下orcle语句:merge into ent_sso a using (select * from (select count(id) num,shxydm xydm from yjgx.yp_ypscqy group by shxydm)) b ON (a.cornumber=b.shxydm and b.num=1 and b.xydm is not null) when matched then update set a.isdrpro=3200
时间: 2024-03-21 07:41:36 浏览: 14
好的,以下是针对Oracle数据库的MERGE语句,它与您提供的MySQL语句相同,只需稍作调整即可:
```
MERGE INTO ent_sso a
USING (SELECT COUNT(id) num, shxydm xydm FROM yjgx.yp_ypscqy GROUP BY shxydm) b
ON (a.cornumber = b.shxydm AND b.num = 1 AND b.xydm IS NOT NULL)
WHEN MATCHED THEN
UPDATE SET a.isdrpro = 3200;
```
该语句的作用与您提供的MySQL语句相同,即从`yjgx.yp_ypscqy`表中统计每个`shxydm`出现的次数,并筛选出仅出现一次且`xydm`不为空的记录。然后将这些记录插入到`ent_sso`表中,如果已经存在相同的`cornumber`(即`shxydm`),则更新对应的`isdrpro`值为3200。
请注意,要使用MERGE语句,必须在`ent_sso`表中设置`cornumber`列为主键或唯一索引。
相关问题
UPDATE Table2 t2, (SELECT req, MAX(time) AS time FROM Table1) t1 SET t2.atime = t1.time WHERE t1.req = t2.req; 这句Orcle的SQL哪错了
在 Oracle 中,你不能在 UPDATE 语句中使用子查询的方式进行更新。相反,你可以使用 MERGE 语句来实现类似的功能。以下是使用 MERGE 语句来更新的示例:
```sql
MERGE INTO Table2 t2
USING (SELECT req, MAX(time) AS time FROM Table1 GROUP BY req) t1
ON (t1.req = t2.req)
WHEN MATCHED THEN
UPDATE SET t2.atime = t1.time;
```
这段代码将根据 `Table1` 中每个 `req` 的最大 `time` 值来更新 `Table2` 中的 `atime` 列。请确保将表名和列名与你的实际情况相匹配。
orcle 删除表报正在使用_Orecle删除表格时报错ORA-24005:使用了不适当的实用程序在AQ表**上执行DDL...
ORA-24005错误是由于使用了不适当的实用程序在AQ表上执行DDL语句引起的。这种错误通常是由于在表格上执行了某些操作,例如更改表格结构或删除表格时表格正在被使用,导致了该错误的出现。在这种情况下,您需要找到使用该表格的所有会话,并停止它们。您可以使用以下命令来查找正在使用表格的会话:
```sql
SELECT s.sid, s.serial#, s.username, s.status, s.osuser, s.machine
FROM v$locked_object l, v$session s
WHERE l.object_id = object_id('your_table_name') AND l.session_id = s.sid;
```
然后,您可以使用以下命令来终止会话:
```sql
ALTER SYSTEM KILL SESSION 'sid,serial#';
```
其中,sid和serial#是您要终止的会话的标识符。终止会话后,您可以重新尝试删除表格。