Sql 在对表的列执行更新活动后,如何检查数据库中的所有表是否都已修改?
我必须用值DD更新所有列名为“%DIV%”的表,不管它是MG还是MG,我已经为它编写了脚本,但我不知道如何在执行活动后验证是否所有表的列都更新为值DD。我已经写了这个查询Sql 在对表的列执行更新活动后,如何检查数据库中的所有表是否都已修改?,sql,oracle,plsql,Sql,Oracle,Plsql,我必须用值DD更新所有列名为“%DIV%”的表,不管它是MG还是MG,我已经为它编写了脚本,但我不知道如何在执行活动后验证是否所有表的列都更新为值DD。我已经写了这个查询 SELECT 'SELECT '||OWNER||'.'||TABLE_NAME||', '||COLUMN_NAME||' FROM '||OWNER||'.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' = ''MG'' ;' FROM RADHA.CHANGE_TABLE WHERE V
SELECT 'SELECT '||OWNER||'.'||TABLE_NAME||', '||COLUMN_NAME||' FROM '||OWNER||'.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' = ''MG'' ;'
FROM RADHA.CHANGE_TABLE
WHERE VALID_FLAG='Y'
我打算做一个像这样的桌子结构
OWNER TABLE_NAME PREV_COUNT
PREV_COUNT将保存列值为MG的行的计数,在执行活动后,我将使用以下查询验证相应的行是否已更新为DD
SELECT 'SELECT '||OWNER||'.'||TABLE_NAME||', '||COLUMN_NAME||' FROM '||OWNER||'.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' = ''DD'' ;' FROM RADHA.CHANGE_TABLE WHERE VALID_FLAG='Y'
这个查询的输出将进入表中
OWNER TABLE_NAME NEW_COUNT
但是我无法从Select查询中获取记录,因为它是写入Select查询中的字符串,但我希望结果集能够将记录插入到上面提到的表中,请指导如何进一步处理我没有您的表,但是-基于Scott的示例模式,下面是一个脚本,它在所有表中搜索名为
JOB
(第8行)的列,并检查其中有多少列的值看起来像(提示:like
)CLERK
(第12行)
看看它是如何工作的,调整它使它适合你
SQL> DECLARE
2 l_str VARCHAR2(500);
3 l_cnt NUMBER := 0;
4 BEGIN
5 FOR cur_r IN (SELECT u.table_name, u.column_name
6 FROM user_tab_columns u, user_tables t
7 WHERE u.table_name = t.table_name
8 AND u.column_name = 'JOB'
9 )
10 LOOP
11 l_str := 'SELECT COUNT(*) FROM ' || cur_r.table_name ||
12 ' WHERE ' || cur_r.column_name || ' like (''%CLERK%'')';
13
14 EXECUTE IMMEDIATE (l_str) INTO l_cnt;
15
16 IF l_cnt > 0 THEN
17 dbms_output.put_line(l_cnt ||' : ' || cur_r.table_name);
18 END IF;
19 END LOOP;
20 END;
21 /
4 : EMP --> there are 4 CLERKs in the EMP table
PL/SQL procedure successfully completed.
SQL>
您需要使用。我只想通过表来验证我的数据,因为大约有1000个表,这就是我提到表结构的原因。好的。游标的
select
将在架构中包含该列的所有表中运行。是的,但是如何将数据插入到我的表结构所有者列\u NAME PREV\u count而不是(或连同)DBMS\u输出,请使用insert into OUR table(第17行)。详细说明什么?如何键入insert语句<代码>将值(用户'JOB',l_cnt')插入您的_表(所有者、列名称、上一个计数)代码>