1.通过Rowid是最快的方式来访问一个列
Rowid的类型是Rowid或URowid,但它不是实际储存在数据库中的,所以你不能update,
delete,insert rowid
当你在某些情况下重新插入或删除数据时,Rowid是会变化的,所以它是不可靠的,不应用它作为
主键或者其他什么操作
1)rowid不是用来唯一标识表中的列的。它是用来唯一标识表中的数据行(即记录)。
2)rowid的值是全库唯一的,是由:表空间标识+文件标识+对象标识+行标识 四部分组成的。
https://blog.csdn.net/tss139/article/details/80197673
2.execute immediate,
在存储过程中,如果创建表之后,向表中插入数据,那么在编译存储过程时,表还么有创建,因此会出现编译错误,在insert语句前加上execute immediate的语句后编译时就不会检查表是否存在了直接insert
count(*),会把星号翻译成字段的名字,计算分组下重复的行数。
https://www.cnblogs.com/zj0208/p/6088097.html
create or replace procedure proc_test( --参数区域 ) is --变量区域 --sql脚本 v_sql varchar2(2000) :=''; --记录学生数量 v_num number; begin --执行区域 -- execute immediate用法1:立刻执行sql语句 v_sql := 'create or replace view myview as select id,name from student'; execute immediate v_sql; --- execute immediate用法2:立刻执行sql语句,并赋值给某个变量 v_sql := 'select count(1) from student'; execute immediate v_sql into v_num; -- execute immediate用法3:带参数的sql v_sql:='select * from student t where t.name=:1 and t.age=:2'; execute immediate v_sql using 'ZhangSan',23; 位置参数(我给起的名字),第一个参数:1 第二个参数:2 : 取变量值 end proc_test;
EXECUTE IMMEDIATE 'SELECT ROWID' || CHR (10) ||
' FROM ' || rec_del.OBJECT_NAME || CHR (10) ||
' WHERE ' || rec_del.CONDITION || CHR (10) ||
' AND ROWNUM < :1 '
BULK COLLECT INTO BV_STG_TAB
USING n_chunksize;
这里的:1 取的就是USING 后面的第一个参数的值n_chunksize;
EXECUTE IMMEDIATE 'DELETE FROM ' || rec_del.OBJECT_NAME || CHR (10) ||
' WHERE ROWID = :1'
USING BV_STG_TAB(i);
这里的:1 取的是usring 后面第一个参数BV_STG_TAB(i) 的值。