gpt4 book ai didi

oracle - 迭代 Oracle 中的对象表

转载 作者:行者123 更新时间:2023-12-04 00:31:19 25 4
gpt4 key购买 nike

我应该如何迭代这样的对象表?

CREATE TYPE SOME_OBJECT AS OBJECT (
ATTR1 VARCHAR2(20)
, ATTR2 VARCHAR2(30)
);
/

CREATE TYPE C_SOME_OBJECT AS TABLE OF SOME_OBJECT;
/

而且...我想将其用作过程的参数。必须在程序中初始化它吗?
PROCEDURE SOME_PROCEDURE(OBJECT IN C_SOME_OBJECT)
IS
BEGIN
--Some code here iterating IN parameter
END;

最佳答案

-- NOTE #1
-- You cant use Object as name for your input variable because it is a type
-- (Types are reserved words)
PROCEDURE SOME_PROCEDURE(p_SOME_TABLE IN C_SOME_OBJECT)
IS
BEGIN
FOR i IN p_SOME_TABLE.FIRST .. p_SOME_TABLE.LAST
LOOP
-- NOTE #2 Manage it like this
-- Current iteration: p_SOME_TABLE(i)
-- Access Example : p_SOME_TABLE(i).ATTR1

-- NOTE #3 Or you can assign current iteration to a variable
-- then use that variable thought it is not by reference if you
-- do it like this.
END LOOP;
END;

更新:

还要注意不要将记录与对象混淆。

OBJECT 是一种 SQL 类型,但另一方面 RECORD 是一种 PL/SQL 类型,您可以将其更多地视为 C/C++ 之类的结构。

更新_2:

请注意,如果表为空,这不会引发任何异常,因此您需要处理没有数据的情况,例如您可以像这样使用 .COUNT:
IF p_SOME_TABLE.COUNT = 0 THEN
RAISE my_exception;
END IF;

关于oracle - 迭代 Oracle 中的对象表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50601918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com