从对象类型列SQL中选择字符串的一部分

时间:2014-02-19 12:44:26

标签: sql database oracle plsql

所以很快我收到一个SQL错误:ORA-00932:不一致的数据类型:预期NUMBER得到了OE.CUST_ADDRESS_TYP 00932. 00000 - 当我尝试检索字符串数据的一部分时,“不一致的数据类型:预期%s得到%s”。

SELECT dbms_lob.SUBSTR(cus.cust_address, 0, INSTR(cus.cust_address, ',')-1) AS output
FROM oe.customers cus;

基本上这就是我的陈述。

数据如下:OE.CUST_ADDRESS_TYP('322 E Michigan St','53202','Milwaukee','WI','US')

我只想展示这个城市,在这种情况下将是密尔沃基。

但是,cust_address列的data_type设置为CUST_ADDRESS_TYP,它是address_typ类型的对象列。

我只想选择一个字符串的一部分,例如,我只想从OE.CUST_ADDRESS_TYP('322 E Michigan St','53202','Milwaukee','WI','US')中选择密尔沃基。

CUST_ADDRESS CUST_ADDRESS_TYP是4 address_typ类型的对象列。

这就是表格中的显示方式。

因为语句适用于varchar类型的列而不是这个列,所以真的让我感到烦恼。

亲切的问候,

P.S。通过使用对象类型列修复它,没有使用Treat tho。非常感谢。

1 个答案:

答案 0 :(得分:0)

请参阅Oracle文档中的对象类型请求语义:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions198.htm

SQL> create type comp_type is object(
  2   x varchar2(10)
  3   , y varchar2(10)
  4  )
  5  /


SQL> create table t (col comp_type)
  2  /


SQL> insert into t values(comp_type('A','B'))
  2  /

SQL> commit
  2  /

SQL> select treat(col as comp_type).x, treat(col as comp_type).y from t
  2  /

TREAT(COLA TREAT(COLA                                                           
---------- ----------                                                           
A          B