oracle PLSQL 查询语句select t.*, t.rowid from PU.YK t
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle PLSQL 查询语句select t.*, t.rowid from PU.YK t相关的知识,希望对你有一定的参考价值。
1、这语句是什么意思,请整句给个解释,谢谢。
2、这样的语句查出来后为什么不能像SQL那样直接修改,如果需要修改的话应该怎么做。
请给答案,不要像一楼那样灌水。
t.rowid 表示唯一标识t表中伪列
PU.YK 表示的是用户PU下的YK表
PU.YK t 表示的是t是YK这个表的别名(也就是另外一个简化的名字,可以随意写)
整个语句的意思也就是查询PU用户下YK表的所有记录信息,以及每条记录对应的ROWID信息
2,
在plsql里面独特的rowid(也就是上面提到的伪劣),在sql中不支持。所以就没有办法修改了,但是如果要修改的话。可以直接去原本修改。比如直接在YK表中修改。
select * from pu.yk;
然后相应的修改YK这张表里面的东西就可以了。
如果还有不会可以的再问我哦 。嘿嘿
哈哈哈 参考技术A 解释如下
t.* -----表示查询表t 所有字段
t.rowid---表示唯一标识t表中的物理位置字段(伪列),这个字段是每个表中都默认有的,当设计表时没有设置主键或唯一标实的时候,也可吧他动作表的唯一标示(删除重复数据可用到)
PU.YK---表示查询的是用户名为PU下的YK表,如果是以PU用户登陆的数据库,PU也可以省略
t---PU.YK 表的别名,用于书写的时候方便简单,与PU.YK 完全相同,只是名字不同而已,就行你的学名和你的小名一样。
整个语句的意思也很简单,就是查询PU用户下YK表的所有记录信息,以及每条记录对应的ROWID信息
rowid是oracle特有的,sqlserver不支持,sqlserver可设置自增字段或唯一标识列代替 参考技术B PU应该是用户名,PU.YK就是PU用户下的YK表;
最后的t是别名,代替PU.YK;
t.*是指PU用户下的YK表中满足条件的所有数据;
t.rowid是每条数据对应的物理地址的id;
语句含义为:查询PU用户下的YK表的全部数据及每条数据对应的rowid 参考技术C 第一个问题已经回答的很清楚了,我来说一下第二个问题。
1、问题中给出的语句是查出记录后可以直接修改的,语句本身没有问题。
2、问题出在你登入的用户对PU用户YK表有没有增删改权限。
解决方法:1、直接以PU用户登入,然后进行上述处理。
2、为你登入的用户授予PU用户YK表增删改权限。 参考技术D 1查询PU用户下的YK表中的所有列信息,并且增加了一列伪列
2因为伪列是数据库中实际不存在的所以没有办法进行修改 只能修改数据库中其他实际存在的列
plsql - 带有集合的 Oracle 选择
【中文标题】plsql - 带有集合的 Oracle 选择【英文标题】:plsql - Oracle select with collections 【发布时间】:2016-03-23 08:04:02 【问题描述】:我有两个数字集合,一个包含 n 个 id,一个包含 n 个值。我还有一个包含 n 条记录的选择语句。现在,我想和他们一起。 直觉上我试图做这样的事情:
select * from
(
select t.stat StatNr
, t.statNr StatValue
, t.statName statusName
from myTable t
where t.nr = 1234
order by ...
) status,
(
select statId.v StatNr
, statVal.v StatValue
from
(
select column_value v
, rownum r
from table( numberCollection( 98, 45, 66, 153, 103, 67, 27 ) )
) statId,
(
select column_value v
, rownum r
from table( numberCollection( 1, 2, 1, 1, 3, 2, 2 ) )
) statVal
where statId.r = statVal.r
) statusNew
where status.StatNr = statusNew.StatNr
and status.StatValue <> statusNew.StatValue
所以,没有数字集合的 select 语句返回如下内容:
ID VALUE NAME
98 1 some varchar
153 1 some varchar
66 1 some varchar
27 3 some varchar
67 4 some varchar
45 1 some varchar
103 1 some varchar
我想从我的集合中添加相应的 id 和值,以查看我的表中的值行是否与我的集合中的值行不同,然后返回名称。
所以,结果如下所示:
ID VALUE NAME ID VALUE
98 1 some varchar 98 1
153 1 some varchar 153 1
66 1 some varchar 66 1
27 3 some varchar 27 2
67 4 some varchar 67 2
45 1 some varchar 45 2
103 1 some varchar 103 3
前一个 id 和 value 来自表,后一个 id 和 value 列来自集合。
所以最后的where子句:
and status.StatValue <> statusNew.StatValue
会给我改变值的记录,返回第 4 - 7 行。
现在,从我的角度来看,这看起来有点难看。特别是我检查rownum的where子句。无论如何,我对 Oracle 还是比较陌生,这有什么缺点或更好的方法来完成这个吗?
【问题讨论】:
join them together
是什么意思。能否贴出原始数据结构和预期结果
是的,抱歉,我编辑了我的帖子
【参考方案1】:
因为您将匹配信息和比较数据放在两个独立的 numberCollections 中,所以同步这两个列表的唯一方法是按位置,这里是 ROWNUM。
但是您可以使用 WITH 子句使您的 SQL 更具可读性:
WITH comparedata AS (
SELECT statid.v StatNr, statval.v StatValue
FROM (
select column_value v
, rownum r
from table( numberCollection( 98, 45, 66, 153, 103, 67, 27 ) )
) statId,
(
select column_value v
, rownum r
from table( numberCollection( 1, 2, 1, 1, 3, 2, 2 ) )
) statVal
where statId.r = statVal.r
)
select t.statNr
, t.statValue
, t.statName
from myTable t
JOIN comparedata d ON d.StatNr ON t.StatNr
where t.nr = 1234
and status.StatValue <> statusNew.StatValue
order by ...
在这里,您使用映射的 numberCollections 的结果定义了一个名为“comparedata”的命名子查询。 在此之后,您可以将“comparedata”用作 JOIN 子句中的任何视图或表与您的真实表。
实现目标的其他方法最终会产生更多代码(例如例程,它将格式为“id=value;[id=value;...]”的字符串拆分为具有两列 ID 和价值。 但是,如果您必须更频繁地执行此类工作,您可能会考虑是否值得花时间创建这样的功能。
【讨论】:
以上是关于oracle PLSQL 查询语句select t.*, t.rowid from PU.YK t的主要内容,如果未能解决你的问题,请参考以下文章