您可以使用以下脚本在模式的所有列中搜索值。脚本的执行时间取决于模式中表的数量以及每个表中的行数。
用您打算搜索的值替换'abc'。此外,脚本现在将搜索所有VARCHAR2列。您还可以将表名和计数插入到表中,而不是执行DBMS_OUTPUT.PUT_LINE。
DECLARE
CURSOR cur_tables
IS
SELECT table_name,
column_name
FROM user_tab_columns
WHERE data_type = 'VARCHAR2';
v_sql VARCHAR2(4000);
v_value VARCHAR2(50);
v_count NUMBER;
BEGIN
v_value := 'abc';
FOR c_tables IN cur_tables LOOP
v_sql := 'SELECT count(1) FROM ' || c_tables.table_name || ' WHERE ' || c_tables.column_name || ' = :val' ;
EXECUTE IMMEDIATE v_sql INTO v_count USING v_value;
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('Table Name ' || c_tables.table_name || ' Column Name ' || c_tables.column_name || ' Row Count ' || v_count);
END IF;
END LOOP;
END;
您不可能同时使用MySQL,SQL Server和Oracle。请做**不**只是随机添加标签,听起来很熟悉你的问题。只添加**实际相关的标签**。如果您不确定,请阅读标签说明。如果之后不确定,请不要添加标签;如果需要的话,这里有人会添加它。标签具有特定的含义。 –
这些是SO建议的标签。现在删除。 – whyeliah
人们不断建议对我的代码进行修改。我只是在他们进来时才批准他们。我正在使用Oracle的桌面软件SQLDeveloper。标记帖子,但是,你看到适合。 – whyeliah