【问题标题】:Oracle: query against value of user defined typeOracle:查询用户定义类型的值
【发布时间】:2011-04-26 00:00:53
【问题描述】:

我有一个用户定义的类型:

create or replace type my_message_type 
  as object (relatedid varchar2(50), payload clob);

我以编程方式插入了一条消息。 SQL Developer 将插入的对象呈现为:

SYNESSO.MY_MESSAGE_TYPE('abcdefgh','oracle.sql.CLOB@1dae16a')

如何使用 SQL 查询这些数据?例如以下看起来很直观:

select count(1) from table_of_my_messages where user_data.relatedid = 'abcdefgh';

但这会导致ORA-00904: "USER_DATA"."RELATEDID": invalid identifier

然后我发现正确的语法是构造消息类型并使用相等检查。但是如何构造一些字段匹配any的类型的实例呢?:

select * from table_of_my_messages where user_data = my_message_type('abcdefgh', *);
-- ORA-00936: missing expression

select * from table_of_my_messages where user_data = my_message_type('abcdefgh');
-- ORA-02315: incorrect number of arguments for default constructor

select * from table_of_my_messages where user_data = my_message_type('abcdefgh', ?);
-- Missing IN or OUT parameter at index:: 1

【问题讨论】:

    标签: sql oracle ora-00936 oracle-type


    【解决方案1】:

    直观的版本几乎是正确的。我只需要给表起别名就可以了...

    select count(1) from table_of_my_messages m 
        where m.user_data.relatedid = 'abcdefgh';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 2017-03-21
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2012-05-03
      相关资源
      最近更新 更多