首页 > 编程知识 正文

plsql字符集设置,plsql入门

时间:2023-05-03 07:36:05 阅读:115677 作者:2804

oracle软件包纯度级别PRAGMA RESTRICT_REFERENCES (),该PRAGMA很复杂,总的来说是检查子程序的纯度(PURITY )并检查子程序中是否有违反规则的地方的专业人员通常用于函数中,但在函数调用过程时,还必须进行相应的设置检查。 这是为了确保在DML语句中调用函数时成功执行不会出错。

语法,pragma restrict _ references (function _ name|default,) RNDS,WNDS,RNPS,WNPS ) |,TRUST );

RNDS、WNDS、RNPS、WNPS可以同时指定。 但是,如果TRUST指定为yes,则忽略其他。

DEFAUT是作用于该软件包的所有子程序、函数。

RNDS(readnodatabasestate )规定子程序不能读取任何数据库状态信息。 这意味着不查询包含DUAL虚拟表的数据库中的表。)

RPS(readnopackagestate )规定子程序不能读取任何包的状态信息、例如变量等。

写入数据基站(wnds )规定子程序不能向数据库写入任何内容。 也就是说,不能修改数据库表)

写入包状态(NPS )规定子程序不向包写入任何内容。 也就是说,不能更改包变量的值)

TRUST表示您相信子程序不会违反一个或多个规则。 在PL/SQL中调用用c或JAVA编写的函数时需要此选项。 这是因为无法检查PL/SQL是否正在运行。

样本:

create or replace package purity is

minsalnumber(9;

maxsalnumber(9;

function max_sal return number;

function min_sal return number;

pragma restrict _ references (max _ sal,wnps );

pragma restrict _ references (min _ sal,wnps );

结束;

createorreplacepackagebodypurityis

function max_sal return number as

比根

选择最大(sal ) into maxsal from emp; 返回最大sal;

结束;

function min_sal return number as

比根

选择最小(sal ) into minsal from emp; 返回最小;

结束;

编译此包时,出现“PACKAGE BODY SCOTT.PURITY编译错误”

错误: PLS-00452:子程序“MAX_SAL”违反了其相关编译说明

行: 2

文本: function max_sal return number

错误: PLS-00452:子程序“MIN_SAL”违反了相关的编译说明

行: 10

文本: function min_sal return number "

由于包中的函数规定不能修改包中的变量,因此在使用函数max_sal和min_sal执行赋值操作时修改了包中的变量minsal和maxsal,从而发生了编译错误。

修改为: 也就是说,函数是只读的,但不更改包变量。

create or replace package purity is

minsalnumber(9;

maxsalnumber(9;

function max_sal return number;

function min_sal return number;

pragma restrict _ references (max _ sal,wnps );

pragma restrict _ references (min _ sal,wnps );

结束;

createorreplacepackagebodypurityis

function max_sal return number as

比根

返回最大sal;

结束;

function min_sal return number as

比根

返回最小;

结束;

比根

选择最小(sal ),最大(sal ) into minsal,最大sal from EMP;

结束;

-调用包的公共函数

SQL var minsal number;

SQL var maxsal number;

sqlexec : minsal :=purity.min _ sal;

pl/sqlproceduresuccessfullycompleted

迷你版

------------

800

sqlexec : max sal :=purity.max _ sal;

pl/sqlproceduresuccessfullycompleted

最大销售

------------

5000

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。