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