【发布时间】:2017-10-09 02:36:03
【问题描述】:
在构建与以下查询相关的 PL/SQL 块方面我需要帮助:
SELECT <PRIMARY_KEY_COLUMN>, <VARCHAR_COLUMN> FROM TABLENAME WHERE REGEXP_LIKE(VARCHAR_COLUMN, UNISTR('[\D800-\DFFF]'));
上述查询将给出与该范围内提及的所有 UTF8 字节相关的输出。
我希望你们帮助我修改上述查询,以便我可以在表中的所有 VARCHAR/CLOB 列上运行它并获得如下输出:
ColumnName Value Primary_key_Column
-----------------------------------------------------------------------
Col1 v1 123
Col1 v2 124
.
.
Col2 v1 167
Col2 v2 123
.
.
请查看并分享您的 cmets。
更新1:
我能够根据收到的 cmets 和其中一篇帖子构建以下块,但它仍然需要编辑:
set serveroutput on;
DECLARE
match_count integer;
v_search_string varchar2(4000) := 'shazamTemplateId';
BEGIN
FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns WHERE data_type in ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2', 'CLOB', 'NCLOB') AND table_name = 'DECORATION_FIELDS')
LOOP
BEGIN
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name || ' WHERE REGEXP_LIKE( '||t.column_name||' = :1)'
INTO match_count
USING UNISTR('[\D800-\DFFF]');
IF match_count > 0 THEN
dbms_output.put_line( t.owner || '.' || t.table_name ||' '||t.column_name||' '||match_count );
END IF;
EXCEPTION
WHEN others THEN
dbms_output.put_line( 'Error encountered trying to read ' || t.column_name || ' from ' || t.owner || '.' || t.table_name );
END;
END LOOP;
END;
【问题讨论】:
-
@KaushikNayak :我尝试了以下帖子中提到的查询:[link]stackoverflow.com/questions/208493/… [link]stackoverflow.com/questions/12921792/… 但是在我正在做的基于模式的搜索方面遇到了障碍。因此,发布了问题
-
@JSapkota :所以关于我在问题中提到的
select查询,它输出与我提供的模式匹配的 primary_key_column_value,varchar_column。所以我在这里尝试构建的是一个查询,它将扫描特定表中的所有 varchars/clob 列,并给出我提到的输出。请帮忙。 -
只需替换 ` ' WHERE '||t.column_name||' = :1'....USING` 与
WHERE REGEXP_LIKE( '||t.column_name||' ,:1')和USING UNISTR('[\D800-\DFFF]') -
@KaushikNayak 但这给了我计数。很抱歉我很笨,但你能告诉我如何修改选择查询以获得我需要的输出格式吗?
-
需要在select中选择主键列和匹配的列名,而不是count。然后按照你喜欢的顺序显示。
标签: oracle plsql database-table