在 plsql varray 中使用对象
using objects in plsql varray
我正在尝试使用 sql 开发人员在 pl/sql 中创建一个对象。我只是在弄乱基础知识以掌握它。我一直收到错误消息
对变量的引用无效 'I'
SET serveroutput ON
create or replace type conditions as object
(var_name varcher (100) ,
extract_method varchar(100),
default_value varchar (100),
idList varchar (100));
DECLARE
condition conditions;
TYPE namesarray IS VARRAY(1) OF conditions;
names namesarray := namesarray();--figure out why this is.
BEGIN
condition := conditions('a', 'b', 'c', 'd');
names.extend;
names(names.last):= condition;
FOR i IN names.FIRST .. names.LAST
LOOP
DBMS_OUTPUT.PUT_line(i.idList);
END LOOP;
end;
我怎样才能让它工作?
尝试使用数据类型 VARCHAR2 而不是 VARCHAR
参见:What is the difference between varchar and varchar2?
FOR..LOOP
隐式迭代变量 I,在本例中,仅包含 collection 的当前索引。
实际上,您应该使用此变量作为 collection.
的索引
请考虑以下方法:
SET serveroutput ON;
--Use VARCHAR2 instead of VARCHAR
CREATE OR REPLACE type conditions
AS object
(
var_name varchar2(100),
extract_method VARCHAR2(100),
default_value VARCHAR2(100),
idList VARCHAR2(100)
) ;
/
DECLARE
condition conditions;
TYPE namesarray IS VARRAY(1) OF conditions;
names namesarray := namesarray() ;--figure out why this is.
BEGIN
condition := conditions('a', 'b', 'c', 'd') ;
names.extend;
names(names.last) := condition;
FOR i IN names.FIRST .. names.LAST
LOOP
DBMS_OUTPUT.PUT_line(names(i) .idList); -- use I as the index for your collection
END LOOP;
END;
/
输出:
d
如上图所示,可以有另一种 VARRAY 替代品。 TABLE这里也可以使用类型。 https://community.oracle.com/thread/457834?start=0&tstart=0
解释了所有集合类型之间的区别
希望对您有所帮助。
SET serveroutput ON;
DECLARE
TYPE namesarray
IS
TABLE OF conditions;
names namesarray := namesarray() ;--NULL Constructor
BEGIN
names:=namesarray(conditions('a', 'b', 'c', 'd'));
FOR i IN names.FIRST .. names.LAST
LOOP
DBMS_OUTPUT.PUT_line(names(i).idList); -- use I as the index for your collection
END LOOP;
END;
我正在尝试使用 sql 开发人员在 pl/sql 中创建一个对象。我只是在弄乱基础知识以掌握它。我一直收到错误消息
对变量的引用无效 'I'
SET serveroutput ON
create or replace type conditions as object
(var_name varcher (100) ,
extract_method varchar(100),
default_value varchar (100),
idList varchar (100));
DECLARE
condition conditions;
TYPE namesarray IS VARRAY(1) OF conditions;
names namesarray := namesarray();--figure out why this is.
BEGIN
condition := conditions('a', 'b', 'c', 'd');
names.extend;
names(names.last):= condition;
FOR i IN names.FIRST .. names.LAST
LOOP
DBMS_OUTPUT.PUT_line(i.idList);
END LOOP;
end;
我怎样才能让它工作?
尝试使用数据类型 VARCHAR2 而不是 VARCHAR 参见:What is the difference between varchar and varchar2?
FOR..LOOP
隐式迭代变量 I,在本例中,仅包含 collection 的当前索引。 实际上,您应该使用此变量作为 collection. 的索引
请考虑以下方法:
SET serveroutput ON;
--Use VARCHAR2 instead of VARCHAR
CREATE OR REPLACE type conditions
AS object
(
var_name varchar2(100),
extract_method VARCHAR2(100),
default_value VARCHAR2(100),
idList VARCHAR2(100)
) ;
/
DECLARE
condition conditions;
TYPE namesarray IS VARRAY(1) OF conditions;
names namesarray := namesarray() ;--figure out why this is.
BEGIN
condition := conditions('a', 'b', 'c', 'd') ;
names.extend;
names(names.last) := condition;
FOR i IN names.FIRST .. names.LAST
LOOP
DBMS_OUTPUT.PUT_line(names(i) .idList); -- use I as the index for your collection
END LOOP;
END;
/
输出:
d
如上图所示,可以有另一种 VARRAY 替代品。 TABLE这里也可以使用类型。 https://community.oracle.com/thread/457834?start=0&tstart=0
解释了所有集合类型之间的区别希望对您有所帮助。
SET serveroutput ON;
DECLARE
TYPE namesarray
IS
TABLE OF conditions;
names namesarray := namesarray() ;--NULL Constructor
BEGIN
names:=namesarray(conditions('a', 'b', 'c', 'd'));
FOR i IN names.FIRST .. names.LAST
LOOP
DBMS_OUTPUT.PUT_line(names(i).idList); -- use I as the index for your collection
END LOOP;
END;