Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ORACLE中通过行搜索特定值_Oracle_Plsql_Querying - Fatal编程技术网

在ORACLE中通过行搜索特定值

在ORACLE中通过行搜索特定值,oracle,plsql,querying,Oracle,Plsql,Querying,我想在包含32列的表行中搜索,在每一行中搜索特定的值和计数外观,是否可以查询整行而不在oracle中键入每一列的名称???是的,这是可能的,但解决方案并不快速,并且需要有关xquery的基本知识 准备测试表 create table test_objects as select * from user_objects where rownum < 100; select * from xmltable('for $row in ora:view("test_objects")

我想在包含32列的表行中搜索,在每一行中搜索特定的值和计数外观,是否可以查询整行而不在oracle中键入每一列的名称???

是的,这是可能的,但解决方案并不快速,并且需要有关xquery的基本知识

准备测试表

create table test_objects as select * from user_objects where rownum < 100;

select * from 
     xmltable('for $row in ora:view("test_objects")/ROW return count($row/*[contains(text(),$TO_SEARCH)])' passing 'N' as "TO_SEARCH" columns cnt number path '.');
查询对值中包含N的列进行计数

如果对查询稍加更改,我们可以看到哪些列包含搜索值

select * from 
     xmltable('for $row in ora:view("test_objects")/ROW return <ROW><CNT>{count($row/*[contains(text(),$TO_SEARCH)])}</CNT><COLUMNS>{string-join($row/*[contains(text(),$TO_SEARCH)]/name(),", " )}</COLUMNS></ROW>' passing 'N' as "TO_SEARCH"
     columns 
     cnt number path 'CNT'
     , list_of_column varchar2(4000) path 'COLUMNS'
     );
在EMP表上测试过,我想应该可以在Oracle DB安装中使用。 创建用于在所有字段中搜索的sql文本。 假设您有权访问DBA_TAB_列,如果没有,请尝试USER_TAB_列(如果您拥有该表) %KING%是搜索词。 SQL字符串限制为4000个字符。 这些表的所有者可能不同,因为您可能会将该表置于不同的架构中 以下可在SQL Plus或您选择的SQL客户端上运行:

VARIABLE cur REFCURSOR;

DECLARE
    v_chr VARCHAR2(4000);
    v_chr_tablename VARCHAR2(30) := 'EMP';
    v_chr_searchterm VARCHAR2(100) := 'KING';
BEGIN

    SELECT 'SELECT * FROM ' ||  v_chr_tablename || ' where '
        || RTRIM ( XMLAGG (XMLELEMENT (E, 'TO_CHAR('
        ||column_name
        || ')', ' || ').EXTRACT ( '//text()')
    ORDER BY column_name).getStringVal (), ' || ')
        ||' like ''%' || v_chr_searchterm || '%'''
    INTO v_chr
    FROM DBA_TAB_COLUMNS
    WHERE table_name = v_chr_tablename
    AND owner        = 'APPS';

    OPEN :cur FOR v_chr;

END;
/
print cur;

不。但您可以获取所有列的列表并创建动态查询即使对于1列,您是否希望在不使用列名的情况下搜索值?oracle如何知道您在搜索什么?听起来像是一个糟糕的数据模型这正是我想要得到的。非常感谢ArkadiuszŁukasiewicz这正是我想要得到的。我不熟悉xmltable,所以如果我想添加更多的条件,如和USER_ID=parameter或其他参数,是否可能?是的,可能。您应该找到一些关于XQuery语言或XQuery FLWOR的教程。第二个选项与普通sql非常相似,您应该清楚这一点