加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – PL / SQL中的DDL语句?

发布时间:2020-12-12 13:03:51 所属栏目:百科 来源:网络整理
导读:我正在尝试下面的代码在 PL/SQL中创建一个表: DECLARE V_NAME VARCHAR2(20);BEGIN EXECUTE IMMEDIATE 'CREATE TABLE TEMP(NAME VARCHAR(20))'; EXECUTE IMMEDIATE 'INSERT INTO TEMP VALUES(''XYZ'')'; SELECT NAME INTO V_NAME FROM TEMP;END;/ SELECT语句
我正在尝试下面的代码在 PL/SQL中创建一个表:
DECLARE
    V_NAME VARCHAR2(20);
BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE TEMP(NAME VARCHAR(20))';
    EXECUTE IMMEDIATE 'INSERT INTO TEMP VALUES(''XYZ'')';
    SELECT NAME INTO V_NAME FROM TEMP;
END;
/

SELECT语句失败并显示以下错误:

PL/SQL: ORA-00942: table or view does not exist

是否可以一个接一个地在单个PL / SQL块中创建,插入和选择所有内容?

我假设您正在执行以下操作:
declare
   v_temp varchar2(20);
begin
   execute immediate 'create table temp(name varchar(20))';
   execute immediate 'insert into temp values(''XYZ'')';

   select name into v_name from temp;
end;

在编译时,表TEMP不存在.它尚未创建.因为它不存在你不能从中选择;因此,您还必须动态执行SELECT.尽管您可以使用returning into语法,但在这种特定情况下实际上不需要执行SELECT.

declare
   v_temp varchar2(20)
begin
   execute immediate 'create table temp(name varchar2(20))';
   execute immediate 'insert into temp 
                      values(''XYZ'')
                      returning name into :1'
                returning into v_temp;
end;

但是,需要动态创建表通常表示设计错误的架构.它本不应该是必要的.

我可以在“Why is dynamic SQL bad?”之后推荐René Nyffenegger’s,因为从性能的角度来看,如果可能的话,你应该避免使用动态SQL.另请注意,您对SQL injection更加开放,应该使用绑定变量和DBMS_ASSERT来帮助防范它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读