Oracle 在PLSQL中显示所有对象值
我试图显示一个对象中的所有值,但它给我“必须声明”错误 我尝试了下面的代码,但仍然给出相同的错误Oracle 在PLSQL中显示所有对象值,oracle,plsql,Oracle,Plsql,我试图显示一个对象中的所有值,但它给我“必须声明”错误 我尝试了下面的代码,但仍然给出相同的错误 declare outN mytype; begin outN:= get_data(); dbms_output.put_line(outN.toString); -- tried this as well dbms_output.put_line(outN.ID); dbms_output.put_line(outN.G);
declare
outN mytype;
begin
outN:= get_data();
dbms_output.put_line(outN.toString);
-- tried this as well
dbms_output.put_line(outN.ID);
dbms_output.put_line(outN.G);
dbms_output.put_line(outN.GES);
dbms_output.put_line(outN.CC);
dbms_output.put_line(outN.RR);
end;
我的目标是:
create or replace TYPE "mytype"
AS OBJECT
(
"ID" NUMBER(10),
"G" NUMBER(10),
"GES" VARCHAR(100 BYTE),
"CC" NUMBER(10),
"RR" VARCHAR(100 BYTE)
);
错误:
错误报告-
ORA-06550:第5行第38列:
PLS-00302:必须声明组件“ID”
ORA-06550:第5行第7列:
PL/SQL:忽略语句
ORA-06550:第6行第38列:
PLS-00302:必须声明成分“G”
ORA-06550:第6行第7列:
PL/SQL:忽略语句
ORA-06550:第7行第38列:
PLS-00302:必须声明部件“GES”
ORA-06550:第7行第7列:
PL/SQL:忽略语句
ORA-06550:第8行第38列:
PLS-00302:必须声明组件“CC”
ORA-06550:第8行第7列:
PL/SQL:忽略语句
ORA-06550:第9行第38列:
PLS-00302:必须声明部件“RR”
ORA-06550:第9行第7列:
PL/SQL:忽略语句
655000000-“行%s,列%s:\n%s”
*原因:通常是PL/SQL编译错误
另一个:
错误报告-
ORA-06550:第5行第38列:
PLS-00302:必须声明组件“TOSTRING”
ORA-06550:第5行第7列:
PL/SQL:忽略语句
655000000-“行%s,列%s:\n%s”
*原因:通常是PL/SQL编译错误。
*行动:
get_data
只是一个返回select语句结果的函数(返回db行)不确定代码中的get_data()
和toString
是什么。但是,这应该解释如何显示对象值
create or replace TYPE mytype -- removed double quotes
AS OBJECT
(
"ID" NUMBER(10),
"G" NUMBER(10),
"GES" VARCHAR2(100 BYTE), --Use VARCHAR2 instead of VARCHAR
"CC" NUMBER(10),
"RR" VARCHAR2(100 BYTE)
);
/
SET SERVEROUTPUT ON
DECLARE
outn mytype := mytype(1,10,'GES1',20,'RR1'); --declaration and assignment
BEGIN
dbms_output.put_line(outn.id);
dbms_output.put_line(outn.g);
dbms_output.put_line(outn.ges);
dbms_output.put_line(outn.cc);
dbms_output.put_line(outn.rr);
END;
/
结果
Type MYTYPE compiled
1
10
GES1
20
RR1
PL/SQL procedure successfully completed.
不确定代码中有什么
get_data()
和toString
。但是,这应该解释如何显示对象值
create or replace TYPE mytype -- removed double quotes
AS OBJECT
(
"ID" NUMBER(10),
"G" NUMBER(10),
"GES" VARCHAR2(100 BYTE), --Use VARCHAR2 instead of VARCHAR
"CC" NUMBER(10),
"RR" VARCHAR2(100 BYTE)
);
/
SET SERVEROUTPUT ON
DECLARE
outn mytype := mytype(1,10,'GES1',20,'RR1'); --declaration and assignment
BEGIN
dbms_output.put_line(outn.id);
dbms_output.put_line(outn.g);
dbms_output.put_line(outn.ges);
dbms_output.put_line(outn.cc);
dbms_output.put_line(outn.rr);
END;
/
结果
Type MYTYPE compiled
1
10
GES1
20
RR1
PL/SQL procedure successfully completed.
什么是
toString
?我在其定义中没有看到类型为mytype
的属性(或方法)。在任何情况下,第一个错误都会在类型的名称处抛出。您将其声明为“mytype”
。在Oracle中,使用双引号表示需要区分大小写的标识符。默认情况下,Oracle不区分大小写;它将自动将代码块中的mytype
转换为mytype
,这与“mytype”
不匹配。养成不使用双引号标识符的习惯,它们只会带来麻烦。另一种选择是在声明部分使用双引号。什么是get\u data()
?在您的代码中有一个对它的调用,但您没有向我们展示它是什么。另外:如果你需要帮助,你必须在你的帖子中包含准确的错误信息。现在,类型MYTYPE
没有声明(小写“MYTYPE”
是,这是不同的),但是您可能会得到更多错误-请确切地告诉我们它们是什么。编辑我的问题很抱歉,但我不相信您。如果您定义了类型“mytype”
但引用时没有双引号,您将无法访问“未声明的组件”,您将得到错误PLS-00201:必须首先声明标识符“mytype”。除非。。。您是否也(可能在过去)创建了一个类型MYTYPE
?您的架构(或您有权访问的架构)中可能仍存在哪些?如果您从所有类型中选择*,其中UPPER(type\u name)=“MYTYPE”
,您会得到什么?什么是到字符串
?我在其定义中没有看到类型为mytype
的属性(或方法)。在任何情况下,第一个错误都会在类型的名称处抛出。您将其声明为“mytype”
。在Oracle中,使用双引号表示需要区分大小写的标识符。默认情况下,Oracle不区分大小写;它将自动将代码块中的mytype
转换为mytype
,这与“mytype”
不匹配。养成不使用双引号标识符的习惯,它们只会带来麻烦。另一种选择是在声明部分使用双引号。什么是get\u data()
?在您的代码中有一个对它的调用,但您没有向我们展示它是什么。另外:如果你需要帮助,你必须在你的帖子中包含准确的错误信息。现在,类型MYTYPE
没有声明(小写“MYTYPE”
是,这是不同的),但是您可能会得到更多错误-请确切地告诉我们它们是什么。编辑我的问题很抱歉,但我不相信您。如果您定义了类型“mytype”
但引用时没有双引号,您将无法访问“未声明的组件”,您将得到错误PLS-00201:必须首先声明标识符“mytype”。除非。。。您是否也(可能在过去)创建了一个类型MYTYPE
?您的架构(或您有权访问的架构)中可能仍存在哪些?如果您从所有类型中选择*,其中UPPER(type\u name)=“MYTYPE”
,您会得到什么?谢谢@Kaushik,我不知道您为什么删除双引号?我的代码使用双引号运行良好,但返回的数据没有错误,但问题是显示对象的数据。当我运行代码时,我得到:错误报告-ORA-06550:第6行,第38列:PLS-00302:组件“ID”必须声明ORA-06550:第6行,第7列:PL/SQL:语句忽略ORA-06550:第7行,第38列:PLS-00302:组件“G”必须声明ORA-06550:第7行,第7列:PL/SQL:语句忽略ORA-06550:第8行,第38列:PLS-00302:组件“GES”必须声明ORA-06550:第8行,第7列:PL/SQL:语句忽略ORA-06550:第9行,第38列:PLS-00302:组件“CC”必须声明ORA-06550:第9行,第7列:PL/SQL:语句被忽略ORA-06550:第10行,第38列:PLS-00302:组件“RR”必须声明为ORA-06550:第10行,第7列:PL/SQL:语句被忽略06550。00000-“行%s,列%s:\n%s”*原因:Usuall