首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SELECT执行包时ORA-00904

从SELECT执行包时ORA-00904
EN

Stack Overflow用户
提问于 2016-04-13 21:35:16
回答 1查看 2.4K关注 0票数 0

试图设置特定的安全测试用例。这样做的目的是创建一个可以使用select语句从PL/SQL调用的包。包工作并创建表,但是当我在Oracle中运行SELECT evil_pkg.CreateTab() FROM DUAL时,

ORA- 00904:“EVIL_PKG”。“CREATETAB”:无效标识符00904。00000 - "%s:无效标识符“*原因: *行动:行处错误: 41栏:8

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

这是一个包裹:

代码语言:javascript
复制
--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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 21:42:43

无法从SQL调用包中的过程。

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

您也可以在这里看到discussion,以加深您的理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36610004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档