有错误,高手秀一秀
create or replace procedure a(type in varchar2(18)) is
 v_type varchar2(18);str varchar2(18);
 begin
 str:='select * from user_objects where object_type='||'v_type';
 execute immediate str;
 end;
还有,警告: 创建的过程带有编译错误。为啥在USER_OBJECTS中却存在啊

解决方案 »

  1.   

    要保证能创建,只要把下面的红色部分去掉就可以了
    create or replace procedure a(type in varchar2(18)) is 
    v_type varchar2(18);str varchar2(18); 
    begin 
    str:='select * from user_objects where object_type='||'v_type'; 
    execute immediate str; 
    end; 要保证能执行,还要进一步修改,如下面create or replace procedure a(p_obj_name in varchar2) is 
    v_type varchar2(100);
    str varchar2(2000); 
    begin 
    str:='select object_type from user_objects where object_name=:1'; 
    execute immediate str into v_type  using p_obj_name; 
    dbms_output.put_line(v_type);
    exception when others then
    dbms_output.put_line('error');
    end; 
    /执行
    SQL>SET SERVEROUTPUT ON
    SQL>EXECUTE a('A')返回
    PROCEDURE
      

  2.   

    create or replace procedure a(type in varchar2(18)) is 输入参数不加长度create or replace procedure a(type in varchar2) is 
      

  3.   

    有编译错误仍然可以创建成功,你可以用show error看看具体哪报错
      

  4.   

    编译成功
    执行不行SQL> execu a(procedure);
    BEGIN a(procedure); END;        *
    ERROR 位于第 1 行:
    ORA-06550: 第 1 行, 第 9 列:
    PLS-00103: 出现符号 "PROCEDURE"在需要下列之一时:
    ()-+casemodnotnull
    others<an identifier><a double-quoted delimited-identifier>
    <a bind variable>tableavgcountcurrentexistsmaxminpriorsql
    stddevsumvarianceexecutemultisetthebothleadingtrailingforall
    mergeyearmonthDAY_hourminutesecondtimezone_hour
    timezone_minutetimezone_regiontimezone_abbrtimetimestamp
    intervaldate
    <a string literal with character set specification>
    <a number><a single-quoted SQL string>pipe
    符号 "PROCEDURE" 被忽略。
      

  5.   

    如果要执行参数要用带单引号的字符串,如
    execute a('PROCEDURE')楼主编译的是自己写的代码吗?那段代码在执行时会出错的。
      

  6.   


     create or replace procedure a(type in varchar2) is
       str varchar2(200);
     begin
     str:='select * from user_objects where OBJECT_TYPE=upper('''||type||''')';
     dbms_output.put_line(str);
     execute immediate str;
     end;
      

  7.   

    SQL> set serverout on
    SQL> execu a('PROCEDURE');
    select * from user_objects where OBJECT_TYPE=upper('PROCEDURE')PL/SQL 过程已成功完成。
    但是execute immediate str;好像没执行啊