给单个function创建同义词我知道:
CREATE SYNONYM F FOR B.X
x为function名,B为function所属用户。但是我这数据库有100多个function,请问如何批量创建同义词?oraclefunction数据库sql

解决方案 »

  1.   

    BEGIN
      FOR i IN (SELECT object_name
                  FROM all_objects s
                 WHERE s.object_type = 'FUNCTION'
                   AND s.owner = 'B'
                   AND NOT EXISTS (SELECT 1 FROM all_synonyms t WHERE t.synonym_name = s.object_name))
      LOOP
        EXECUTE IMMEDIATE 'CREATE SYNONYM ' || i.object_name || ' FOR B.' || i.object_name;
      END LOOP;
    END;
      

  2.   

    用你这方法成功了,只不过100多个function,最后有2个失败了,先找不到是哪两个!
      

  3.   

    把for里面那个查询拿出来查一下就知道了。
    SELECT object_name
                  FROM all_objects s
                 WHERE s.object_type = 'FUNCTION'
                   AND s.owner = 'B'
                   AND NOT EXISTS (SELECT 1 FROM all_synonyms t WHERE t.synonym_name = s.object_name)