请教各位,我在创建视图的时候报错。(以前运行这句代码都没错误的)create or replace view svf_nat_a as 
select t.o_name_cn,o_py,o_name_py o_cut_py,pinyin_to_flp(o_name_py) flp 
from svf_nat_0 t
where o_name_cn<>o_py ;提示错误:ora-00904 " pinyin_to_flp" :invalid identifier;该怎么解决?谢谢!

解决方案 »

  1.   

    ORA-00904 string: invalid identifierCause: The column name entered is either missing or invalid.Action: Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #. If it contains other characters, then it must be enclosed in double quotation s. It may not be a reserved word.
      

  2.   

    pinyin_to_flp(o_name_py) 你这是调用了函数,查查pinyin_to_flp() 这个函数是不是被修改了。 
    提示错误:  " pinyin_to_flp" 这个标示符 不可用。  有这个函数吗?
      

  3.   

    -- 用下面语句在你的SCHEMA用户下跑一下看有结果没:
    -- 1。如果没有一条记录返回,那你就没有权限访问这个函数或者这个函数在某一个PACKAGE里面
    -- 2。如果有记录返回,那就说明函数在你的“眼皮”下,那用的时候最好加上OWNER前缀,如果还不行,那可能就没有EXECUTE权限罗
    e.g:  SQL> SELECT OWNER,
      2         OBJECT_NAME,
      3         SUBOBJECT_NAME,
      4         OBJECT_TYPE
      5    FROM ALL_OBJECTS
      6   WHERE OBJECT_TYPE = UPPER('FUNCTION')
      7     AND OBJECT_NAME = UPPER('GET_CLOB_FROM_XML');OWNER                          OBJECT_NAME                    SUBOBJECT_NAME                 OBJECT_TYPE
    ------------------------------ ------------------------------ ------------------------------ -------------------
    SCOTT                          GET_CLOB_FROM_XML                                             FUNCTION
      

  4.   

    to 枫の叶 :
    这个权限指的是数据库用户的权限吗,如果是那用该不是这个问题,因为我用相同的脚本创建了其他的用户,却可以使用该函数。
    如果是需要加owner 那为什么其他的用户创建的时候后不需要加owner 前缀 呢?问题产生的原因我查了一下,会不会因为我创建了一个 W08_Reship 的数据库用户。后来因为其他原因我先删除了该用户,使用的级联删除。而后我创建了相同名字的W08_Reship用户。在新创建的这个用户下,该函数就不能使用了。我曾经尝试重启了系统和数据库,都不能解决该问题,那也证明应该不会是个用户共享的缓冲池混乱了。那真正的原因是什么呢?谢谢!
      

  5.   

    按你这个描述的话。pinyin_to_flp应该不是你当前用户W08_Reship 创建的吧,对于别的用户创建的对象,这里function也是一种对象,你需要用创建对象的用户名加function名来访问,比如如果是A用户创建的。A.pinyin_to_flp()来使用该function,并且需要先把权限给你。通过A用户执行grant execute on pinyin_to_flp to W08_Reship;来grant权限。如何确定是那个用户创建的叻,可以用5楼提供的sql,就是把objecct_name这里的过滤的 变量值,改成 pinyin_to_flp;
      

  6.   

    LZ主是没有权限而已,在建立pinyin_to_flp的账号对W08_Reship,
    在访问时加上建立账号名user.object形式,即7楼所说
    这是由于不同用户模式(schema)访问造成的...