plsql 相关问题

PL / SQL(过程语言/结构化查询语言)是Oracle Corporation的SQL过程语言扩展。关于PL / SQL的问题也应该被标记为“oracle”。常规DML或DDL语句的问题应标记为“sql”和“oracle”,而不是“plsql”。

Oracle 中字符串连接太长错误

我有两列A和B。A就像一个序列(1,2,3,4),B(b1,b2,b3,b4)是与每个序列相关的数据。我还有一列,让我们为每个 Z 列(zxxxxxx)说 Z 。 此数据中存在的数据...

回答 1 投票 0

Oracle SQL 问题 - 需要从表中返回特定行

有您的帮助总是很棒。 我正在使用一个名为 Unica 的活动管理系统,该系统在幕后执行 SQL 查询。 在我的工作中,我有一个联系人历史记录表,其中包含...

回答 1 投票 0

Oracle 过程给出多个语法错误

我编写了一个存储过程来使用一些 IF ELSE 条件更新 2 个表。但是在编译完整的过程时,我收到语法错误,如下所示 错误 1 :-- 错误(1115,1):PLS...

回答 1 投票 0

无法使用批量收集打印多于一列

我需要使用批量收集打印所有列数据我需要如何实现它 我的雇员表为:id,name,salary 此 id、name、salary 需要打印为输出 下面是我的 PLSQL 代码 声明...

回答 1 投票 0

XML 表上 PLSQL 查询的性能调整

我需要对 Oracle 数据库上的表执行一些查询。该表包含 XML 值。下面是我的 xml 结构的示例: 382010 我需要对 Oracle 数据库上的表执行一些查询。该表包含 XML 值。下面是我的 xml 结构示例: <Parent> <ParentId>382010</ParentId> <LastUpd>2023-03-01T22:59:10.456241</LastUpd> <UserId>0</UserId> <attrn>xxx</attrn> <Child> <ChildId>1</ChildId> <Attribute1 ID="1873" D="1466 Description">1466</Attribute1> <Attribute2 ID="1234" D="QWERTY Description" E="503" ED="Error 503 Description">QWERTY</Attribute2> <Attribute3 ID="4921" D="Other Description">YourValue</Attribute3> </Child> <Child> <ChildId>2</ChildId> <Attribute1 ID="1296" D="Some Description">1234</Attribute1> <Attribute2 ID="1234" D="Some Different Description">ABC</Attribute2> <Attribute3 ID="4921" D="Other Description" E="501" ED="Error 501 Description">MyValye</Attribute3> </Child> </Parent> 我需要选择所有有错误的孩子属性,可以通过“E”属性来识别(例如孩子1中的属性2和孩子2中的属性3)。 我对这种 XML 查询不是很专家,经过一番尝试后,我最终构建了下面的查询: SELECT EXTRACTVALUE (VALUE (X), '/Parent/UserId') AS USER_ID ,EXTRACTVALUE (VALUE (X), '/Parent/ParentId') AS PARENT_ID ,EXTRACTVALUE (VALUE (X), '/Parent/attrn') AS PARENT_ATTR_N_COL_NAME ,EXTRACTVALUE (VALUE (I), '/Child/ChildId') AS ROW_NUM ,CASE WHEN EXISTSNODE (VALUE (E), '/Attribute1/@E') = 1 THEN ATTR_ONE_COL_NAME WHEN EXISTSNODE (VALUE (E), '/Attribute2/@E') = 1 THEN ATTR_TWO_COL_NAME WHEN EXISTSNODE (VALUE (E), '/Attribute3/@E') = 1 THEN ATTR_THREE_COL_NAME END AS FIELD ,EXTRACTVALUE (VALUE(E), '/*/text()') as VALUE ,EXTRACTVALUE (VALUE(E), '/*/@E') as ERROR_CODE ,EXTRACTVALUE (VALUE(E), '/*/@ED') as ERROR_DESC FROM XML_TABLE X ,TABLE (XMLSEQUENCE (EXTRACT (VALUE (X), '/Parent/Child'))) I ,TABLE (XMLSEQUENCE (EXTRACT (VALUE (I), '/Child/*'))) E WHERE EXTRACTVALUE (VALUE (X), '/Parent/ParentId') = 382010 AND EXISTSNODE (VALUE (E), '/*/@E') = 1'; 当然,XML(然后是查询)实际上要大得多,我只是发布了一个简化的示例以使其更加综合。有时父节点包含数百个子节点,有时我需要查询数千个父节点,所以我想知道是否有一种方法可以优化上述查询并使其更快。 非常感谢:) 考虑用更新且更强大的 EXTRACTVALUE 替换已弃用的 XMLTABLE 函数。使用 XMLTABLE,所有解析都可以在一次查询中完成。然后,您可以使用该查询来执行 DML 操作,也可以循环遍历它以进行更多的过程控制。 下面的代码与您的结果并不完全匹配,但它足够接近,可以让您了解它是如何工作的。 select parent.user_id, parent.parent_id, parent.parent_attr_n_col_name, child.row_num, attribute.value, attribute.error_code, attribute.error_desc from xmltest x, xmltable ('/Parent' passing x.a columns user_id number path 'UserId', parent_id number path 'ParentId', parent_attr_n_col_name path 'attrn' ) parent, xmltable ('/Parent/Child' passing x.a columns row_num number path 'ChildId' ) child, xmltable ('/Parent/Child/*' passing x.a columns value varchar2(100) path 'text()', error_code varchar2(100) path '@E', error_desc varchar2(100) path '@ED' ) attribute where parent_id = 382010 and error_code is not null; 这是我用于测试代码的架构: --drop table xmltest; create table xmltest(a xmltype); insert into xmltest values(xmltype(' <Parent> <ParentId>382010</ParentId> <LastUpd>2023-03-01T22:59:10.456241</LastUpd> <UserId>0</UserId> <attrn>xxx</attrn> <Child> <ChildId>1</ChildId> <Attribute1 ID="1873" D="1466 Description">1466</Attribute1> <Attribute2 ID="1234" D="QWERTY Description" E="503" ED="Error 503 Description">QWERTY</Attribute2> <Attribute3 ID="4921" D="Other Description">YourValue</Attribute3> </Child> <Child> <ChildId>2</ChildId> <Attribute1 ID="1296" D="Some Description">1234</Attribute1> <Attribute2 ID="1234" D="Some Different Description">ABC</Attribute2> <Attribute3 ID="4921" D="Other Description" E="501" ED="Error 501 Description">MyValye</Attribute3> </Child> </Parent>')); 这是您的查询,根据之前的架构进行了一些对我有用的更改。我不确定你的表是如何设置的 - 使用 REF 而不是值? SELECT EXTRACTVALUE (X.a, '/Parent/UserId') AS USER_ID ,EXTRACTVALUE (X.a, '/Parent/ParentId') AS PARENT_ID ,EXTRACTVALUE (X.a, '/Parent/attrn') AS PARENT_ATTR_N_COL_NAME ,EXTRACTVALUE (I.column_value, '/Child/ChildId') AS ROW_NUM -- ,CASE -- WHEN EXISTSNODE (E.column_value, '/Attribute1/@E') = 1 THEN ATTR_ONE_COL_NAME -- WHEN EXISTSNODE (E.column_value, '/Attribute2/@E') = 1 THEN ATTR_TWO_COL_NAME -- WHEN EXISTSNODE (E.column_value, '/Attribute3/@E') = 1 THEN ATTR_THREE_COL_NAME -- END AS FIELD ,EXTRACTVALUE (E.column_value, '/*/text()') as VALUE ,EXTRACTVALUE (E.column_value, '/*/@E') as ERROR_CODE ,EXTRACTVALUE (E.column_value, '/*/@ED') as ERROR_DESC FROM xmltest X ,TABLE (XMLSEQUENCE (EXTRACT (X.a, '/Parent/Child'))) I ,TABLE (XMLSEQUENCE (EXTRACT (value(I), '/Child/*'))) E WHERE EXTRACTVALUE (X.a, '/Parent/ParentId') = 382010 AND EXISTSNODE (VALUE (E), '/*/@E') = '1';

回答 1 投票 0

Oracle中默认的数据类型varchar2、CHAR或BYTE是什么?

在oracle中,您显然可以指定是否希望将varchar2数据类型长度表示为字节长度或字符长度。 varchar2(10字节) 与 varchar2(10 个字符) 我的问题是,如果我不特别...

回答 1 投票 0

如何将值从 IN 子句传递到 Oracle PLSQL 中的子查询

我有一个场景,我需要将 IN 子句中的值传递到子查询,该子查询使用 Oracle PLSQL 返回特定列的值。 假设我的主要查询如下: 选择列...

回答 1 投票 0

PLS-00382:PL/SQL 块内的表达式类型错误

我是 PL/SQL 新手,我正在尝试使用 %rowtype 创建一个表类型,然后声明一个变量并执行某种操作示例;下面是我的逻辑的代码片段

回答 1 投票 0

为什么 SELECT 语句中的 TABLE 子句在 PLSQL 块中不起作用?

我是 PL/SQL 新手,我正在尝试使用 %rowtype 创建一个表类型,然后声明一个变量并执行某种操作示例;下面是我的逻辑的代码片段

回答 1 投票 0

动态 IN 子句的问题

我有一个可用车型列表存储在数据库字段中(不要问..),我需要在查询的 IN 子句中使用此列表: SELECT * FROM Table1 WHERE model IN (SELECT field1 FROM config_ta...

回答 2 投票 0

Oracle EBS R12 PL/SQL 过程中的错误处理:ORA-29283 - 无效文件操作:不存在的文件或路径 [29434]

我创建了 2 个并发程序:一个负责使用 XDODTEXE 可执行文件、RTF 模板和 XML 数据定义生成 PDF 输出。另一个执行第一个并发程序...

回答 1 投票 0

在PLSQL中,如何获取“用户表”,但不限于所有者,这些表是在不同用户的不同模式下创建的

我想针对不同模式的每个用户和所有者获取表列表。 我试过这个... 从 all_objects 中选择 Owner、Object_Type,其中 Object_Type = "Table"; & 选择...

回答 1 投票 0

如何从oracle中的表对象中采样数据

我试图创建一个可以传递采样参数的程序,我尝试了很多方法但失败了...... 创建或替换 PROCEDURE proc_sampling ( v_样本编号 ) 作为 开始 --...

回答 2 投票 0

返回列表中串联列表的单个输出行的最佳 pl/sql 策略

我有以下数据样本。 等级氏族技能 WpnCode 100 夜魔侠初学者棒 100 夜魔侠射箭 Archblst 10...

回答 1 投票 0

为什么标签不能在end之前声明

下面的代码完美运行 宣布 x 数字:= 0; 开始 环形 如果 x > 5 那么 转到我的标签; 万一; dbms_output.put_line(x); x := 1 + x; 结束循环; << my_label >> x :=...

回答 1 投票 0

Oracle:PLS-00382:表达式类型错误

运行以下程序时: PL/SQL: 宣布 errstr varchar2(4000) := ''; 错误数量; 我的号码; 呃号码; BK1 acct_common.TYPE_TABNUMBER; BK2 acct_common.TYPE_TA...

回答 1 投票 0

Oracle Apex - 具有动态列数的临时表

问题概述: apex 应用程序的目标是提供一种或多或少为生产中的各种项目填写清单的方法,每个生产项目都有一个它需要的标准列表...

回答 1 投票 0

Oracle 数据库中的批量插入失败 - 引用未初始化的集合

我正在开发一个在 Oracle 数据库中执行批量插入(~55k,但也可以更多)的应用程序。 下面是 SQL 脚本:- 宣布 errstr VARCHAR2(4000) := ''; 错误...

回答 2 投票 0

ORACLE 表中 INDEX 启用禁用

我有一张表,有 4 个索引和 6 个约束。现在我必须从另一个表(单表)将 1300 万条数据加载到该表中。当我这样做时,需要 10 分钟才能

回答 1 投票 0

当只有一条记录存在且符合条件时,出现 ORA-01422 错误

我正在尝试在 Oracle PL/SQL 过程中选择数据。当我像这样直接从表中选择数据时 从 CUSTOMER_USERS 选择 * 其中 customer_id = 'cust1234' 和 user_id = '

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.