PL / SQL:创建对象

时间:2015-12-07 08:31:52

标签: sql oracle plsql

我必须创建一个PL / SQL包并且已经提供了一个示例包但是试图遵循它我无法创建一个对象

CREATE OR REPLACE TYPE OBJ_PERSONA_SIGNANT AS OBJECT (
    db_id                         NUMBER(6),
    usuaricreacio                 VARCHAR2(20),
    datacreacio                   VARCHAR2(25),
    nom                           VARCHAR2(25),
    signatura                     VARCHAR2(55),
    disponible                    BOOLEAN,);

CREATE OR REPLACE TBL_PERSONA_SIGNANT IS TABLE OF OBJ_PERSONA_SIGNANT;

但我还是得到了:

Error: PLS-00201: identifier 'OBJ_PERSONA_SIGNANT' must be declared

这应该不够吗?老实说,我不知道为什么我会使用一个对象,而所有这些信息已经在一个表中,但新工作,新规则。

我猜我应该初始化它或者其他什么但是花了最后一小时试图找出我应该做什么/我应该怎么做而且我的google-fu不是这样:/

任何想法都将受到高度赞赏。

5 个答案:

答案 0 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<link href="style.css" rel="stylesheet" />
<script src="map.js"></script>
<div id="map-canvas"></div>

此处您还有一个额外的disponible BOOLEAN,); Oracle也没有布尔数据类型link

将其更改为

,

尝试;

disponible                   VARCHAR2(1));

修改
我怎么知道是否在架构上声明了?
使用CREATE OR REPLACE TYPE OBJ_PERSONA_SIGNANT AS OBJECT ( db_id NUMBER(6), usuaricreacio VARCHAR2(20), datacreacio VARCHAR2(25), nom VARCHAR2(25), signatura VARCHAR2(55), disponible VARCHAR2(1) ) / CREATE OR REPLACE TYPE TBL_PERSONA_SIGNANT AS TABLE OF OBJ_PERSONA_SIGNANT / 视图

ALL_TYPES

答案 1 :(得分:0)

--first you need to check in user object of your type is VALID
select * from user_objects where object_type = 'TYPE' and object_name ='YOUR_TYPE_NAME'
--you can check moere details in user_types 
select * from user_types where type_name ='YOUR_TYPE_NAME'

--you will get type defination in follwing way
select text from user_source where name = 'V_TEMP' order by line
SELECT dbms_metadata.get_ddl('TYPE', 'V_TEMP') FROM DUAL;

最后如果您使用像toad / plsql developer这样的开发人员工具,那么在编辑模式下打开该类型并尝试从工具窗口编译它。 在这里你会得到确切的错误,你可以纠正它。

答案 2 :(得分:0)

TYPE 创建中存在两个问题:

  1. 拼写错误最后由于额外逗号
  2. 第二个陈述中缺少
  3. TYPE 关键字
  4. 解决上述两个问题可以让你创建对象:

    SQL> CREATE OR REPLACE TYPE OBJ_PERSONA_SIGNANT AS OBJECT (
      2      db_id                         NUMBER(6),
      3      usuaricreacio                 VARCHAR2(20),
      4      datacreacio                   VARCHAR2(25),
      5      nom                           VARCHAR2(25),
      6      signatura                     VARCHAR2(55),
      7      disponible                    VARCHAR2(1))
      8  /
    
    Type created.
    
    SQL> CREATE OR REPLACE TYPE TBL_PERSONA_SIGNANT IS TABLE OF OBJ_PERSONA_SIGNANT
      2  /
    
    Type created.
    

答案 3 :(得分:0)

Hey just made some minor modications  in your code and it works for me. Let me know if this helps.
DROP TYPE OBJ_PERSONA_SIGNANT;

CREATE OR REPLACE TYPE OBJ_PERSONA_SIGNANT AS OBJECT (
    db_id                         NUMBER(6),
    usuaricreacio                 VARCHAR2(20),
    datacreacio                   VARCHAR2(25),
    nom                           VARCHAR2(25),
    signatura                     VARCHAR2(55),
    disponible                    VARCHAR2(10) -- ut may contain 'TRUE' or 'FALSE' wich can be manipulated accrordingly
    );

DROP TYPE TBL_PERSONA_SIGNANT;

CREATE OR REPLACE TYPE TBL_PERSONA_SIGNANT IS TABLE OF OBJ_PERSONA_SIGNANT;

答案 4 :(得分:0)

首先,我要感谢大家的意见。 你给了我足够的信息来自己找到问题。

由于声明写得很好(由你们检查过),我意识到我并没有将它放在应有的位置。

对于将来可能会发现这种情况的任何pl / sql开发人员:对象未在包内定义,您必须转到对象浏览器上的类型并从那里做一个“新”!

再次,谢谢大家!