gpt4 book ai didi

oracle - PLSQL_V2_COMPATIBILITY 兼容性

转载 作者:行者123 更新时间:2023-12-02 07:08:48 26 4
gpt4 key购买 nike

我已将 Oracle 数据库从 10g 迁移到 12c。从 12c 开始,oracle 不支持 PLSQL_V2_COMPATIBILITY 参数。

该参数用于: https://www.safaribooksonline.com/library/view/oracle-database-administration/1565925165/re157.html

上述网址中的突出显示点之一是:

The PL/SQL compiler will allow OUT parameters to be used in expression contexts in some cases, for example, in dot-qualified names on the right-hand side of assignment statements. This behaviour is restricted to fields of OUT parameters that are records, and OUT parameters referenced in the FROM list of a SELECT statement.

由于这一变化,我们的许多包都陷入了错误,这些包以前使用带有记录作为输出参数的函数。

CREATE OR REPLACE Package SJMUSER.nagendra AS

TYPE r_standard_url IS RECORD (
v_loginurl VARCHAR2(1000),
v_changepasswordurl VARCHAR2(1000),
v_newloginurl VARCHAR2(1000)
);

TYPE t_standardurl_tbl IS TABLE OF r_standard_url
INDEX BY BINARY_INTEGER;

t_standardurlstype t_standardurl_tbl;

FUNCTION Producestandardurls
(
tp_myuserid IN USERS.User_Id%TYPE,
v_scrntime IN VARCHAR2,
v_scrntoken IN VARCHAR2,
v_wwikey IN VARCHAR2
)
RETURN t_standardurlstype;


end nagendra;
/

错误:

PLS-00488“t_standardurlstype”必须是类型。

这是否需要更改整个代码?就像不使用记录作为输出参数一样?有没有办法解决这个问题?

最佳答案

对于您展示的示例,您只需更改返回类型(对于此函数;对于其他函数可能是 OUT 参数类型):

    RETURN   t_standardurlstype;

到:

    RETURN   t_standardurlstype%type;

或更简单地说:

    RETURN   t_standardurl_tbl;

您当前正在尝试返回变量 t_standardurlstype,它是 t_standardurl_tbl 类型的实例。随着PLSQL_V2_COMPATIBILITY setting它允许从变量推断类型,但你不能再这样做了。您实际上可能没有在其他地方使用该变量 - 如果没有,如果您使用上面的第二种形式,您可以删除它的声明。

所以,是的,您需要更改代码,但仅更改返回和 OUT 参数在包规范和主体中的声明方式。您可以继续使用记录作为 OUT 参数,只需正确声明即可。

不过该设置还有其他含义。有关详细信息,请参阅 My Oracle Support 说明 47354.1,但总结一下其中的内容,您还需要注意这些更改的行为,就像现在的 PL/SQL 一样:

  • 正确强制执行 IN 参数的只读语义,并且不允许索引表方法修改作为 IN 参数传入的索引表。

  • 不允许在表达式上下文中使用 OUT 参数。

  • 不允许在 SELECT 列表的 FROM 子句中使用 OUT 参数,其中读取参数的值。

  • 将返回非法语法返回表达式的错误,该语法应该是返回类型(这是您问题中的代码所遇到的)。

  • 不允许将 IN 参数作为 OUT 传递到另一个过程。

对于这些问题没有快速解决办法或魔杖;如果您的代码依赖于任何这些类别中的任何旧行为,则必须对其进行修改以遵守"new"语法规则。

关于oracle - PLSQL_V2_COMPATIBILITY 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37698214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com