oracle – PL / SQL中的DDL语句?

前端之家收集整理的这篇文章主要介绍了oracle – PL / SQL中的DDL语句?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试下面的代码PL/SQL中创建一个表:
  1. DECLARE
  2. V_NAME VARCHAR2(20);
  3. BEGIN
  4. EXECUTE IMMEDIATE 'CREATE TABLE TEMP(NAME VARCHAR(20))';
  5. EXECUTE IMMEDIATE 'INSERT INTO TEMP VALUES(''XYZ'')';
  6. SELECT NAME INTO V_NAME FROM TEMP;
  7. END;
  8. /

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

  1. PL/sql: ORA-00942: table or view does not exist

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

我假设您正在执行以下操作:
  1. declare
  2. v_temp varchar2(20);
  3. begin
  4. execute immediate 'create table temp(name varchar(20))';
  5. execute immediate 'insert into temp values(''XYZ'')';
  6.  
  7. select name into v_name from temp;
  8. end;

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

  1. declare
  2. v_temp varchar2(20)
  3. begin
  4. execute immediate 'create table temp(name varchar2(20))';
  5. execute immediate 'insert into temp
  6. values(''XYZ'')
  7. returning name into :1'
  8. returning into v_temp;
  9. end;

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

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

猜你在找的Oracle相关文章