繁体   English   中英

从SELECT执行软件包时出现ORA-00904

[英]ORA-00904 when executing package from SELECT

尝试设置特定的安全测试用例。 这个想法是创建一个可以使用select语句从PL / SQL调用的程序包。 该程序包可以工作并创建表,但是当我在Oracle SQL Developer中SELECT evil_pkg.CreateTab() FROM DUAL运行SELECT evil_pkg.CreateTab() FROM DUAL ,我得到了

ORA-00904:“ EVIL_PKG”。“ CREATETAB”:无效的标识符00904。00000-“%s:无效的标识符” *原因:
*操作:在线错误:41列:8

有什么办法可以做到吗? 这里的目的是以这种特定方式执行程序包,而不仅仅是执行程序包。

这是包裹:

--Specification
CREATE OR REPLACE PACKAGE evil_pkg AS
  PROCEDURE CreateTab;
END evil_pkg;
/

--Body 
CREATE OR REPLACE PACKAGE BODY evil_pkg AS

  PROCEDURE CreateTab
AS 

BEGIN 

 execute immediate 'CREATE TABLE my_evil_table (id number) ';

      COMMIT ; 

EXCEPTION 
        WHEN OTHERS THEN 
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
        DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
        ROLLBACK;
        RAISE;

        END CreateTab;

END evil_pkg;

不能从SQL调用包中的过程。

如果将过程转换为函数(可能返回true或false或返回值),则可以从sql中调用该函数。

您也可以在此处查看讨论以进一步理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM