表格中没有主键。
我的表就像
col0 col1 col2 col3
rox 12 34 35
max 56 34 35
bill 13 56 35
rox 56 34 35
sam 12 56 34
我想要一个显示如下额外列的查询:
adb uninstall <package name>
答案 0 :(得分:0)
添加新列
alter table your_table
add col0 varchar2(10);
“表格中没有主键。”
这意味着col0中的值与现有列之间的关系基本上是随机的,这使我们可以自由地填充新列。
以下是测试数据:
SQL> select * from your_table;
COL0 COL1 COL2 COL3
---------- ---------- ---------- ----------
12 34 35
56 34 35
13 56 35
56 34 35
12 56 34
SQL>
这是一个PL / SQL例程,它使用批量操作来更新表中的所有行。
SQL> declare
2 -- this collection type will be available in all Oracle databases
3 new_col sys.dbms_debug_vc2coll :=
4 sys.dbms_debug_vc2coll('rox','max','bil','rox','sam');
5 your_table_rowids sys.dbms_debug_vc2coll;
6 begin
7 -- note: solution fits given data, so does not bother to handle large volumnes
8 select rowidtochar(yt.rowid)
9 bulk collect into your_table_rowids
10 from your_table yt;
11
12 -- NB: this is not a loop, this is a bulk operation
13 forall idx in your_table_rowids.first()..your_table_rowids.last()
14 update your_table yt
15 set yt.col0 = new_col(idx)
16 where yt.rowid = chartorowid(your_table_rowids(idx))
17 ;
18 end;
19 /
PL/SQL procedure successfully completed.
SQL>
由于您的表没有主键和重复行,因此必须使用ROWID
。
无论如何,这是结果:
SQL> select * from your_table
2 /
COL0 COL1 COL2 COL3
---------- ---------- ---------- ----------
rox 12 34 35
max 56 34 35
bil 13 56 35
rox 56 34 35
sam 12 56 34
SQL>
答案 1 :(得分:0)
written an answer which uses DDL and UPDATE to change the database state我正确地阅读了问题标题8-)所以这是一个选择伪列COL0
的查询。
用这个测试数据:
SQL> select * from your_table
2 /
COL1 COL2 COL3
---------- ---------- ----------
12 34 35
56 34 35
13 56 35
56 34 35
12 56 34
SQL> with nt as (
2 select column_value as col0
3 , rownum as rn
4 from
5 table(sys.dbms_debug_vc2coll('rox','max','bil','rox','sam'))
6 )
7 select nt.col0
8 , yt.col1
9 , yt.col2
10 , yt.col3
11 from nt
12 join ( select t.*
13 , rownum as rn
14 from your_table t) yt
15 on yt.rn = nt.rn
16 /
COL0 COL1 COL2 COL3
---------- ---------- ---------- ----------
rox 12 34 35
max 56 34 35
bil 13 56 35
rox 56 34 35
sam 12 56 34
SQL>