精华内容
下载资源
问答
  • 在使用存储过程进行建表时,提示没有权限 :ORA-01031: insufficient privileges 如下图所示 存储过程代码如下: CREATE OR REPLACE PROCEDURE sp_test IS v_sql VARCHAR2(500); ----------备份表 v_sql := '...

    在使用存储过程进行建表时,提示没有权限 :ORA-01031: insufficient privileges 如下图所示
    在这里插入图片描述
    存储过程代码如下:

    CREATE OR REPLACE PROCEDURE sp_test  IS
       v_sql            VARCHAR2(500);
       ----------备份表
        v_sql := 'create table  t_test  as  select * from user_tables'  ;
        EXECUTE IMMEDIATE v_sql;
        --清空
     END;
    

    但是sql命令窗口是能正常执行建表语句的。
    找了很久的问题也没发现,终于找到解决办法就是加上 Authid Current_User

    CREATE OR REPLACE PROCEDURE sp_test Authid Current_User IS
        v_sql VARCHAR2(500);
    BEGIN
        ----------备份表
        v_sql := 'create table  t_test  as  select * from user_tables';
        EXECUTE IMMEDIATE v_sql;
        --清空
    END;
    

    完美解决!!!
    需要注意的是,如果涉及到嵌套调用,另外一个存过调用包含create table的存过时也需要添加 Authid Current_User。
    不然同样不能正常调用。
    还发现是不是拥有 SELECT_CATALOG_ROLE 角色可以不用添加 Authid Current_User。

    展开全文
  • !... create or replace procedure test_param(p_id1 ... 这是存储过程 begin -- Call the procedure test_param('1'); end; 这是测试代码 为什么会报 ora-01036: 非法的变量名/编号 的错误!
  • CREATE OR REPLACE procedure TEST_LIST as CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t; begin for Test_record IN TEST_CURSOR Loop DBMS_OUTPUT.put_line(Test_record.id1||Test_...
  • 我想建一个存储过程 用来创建一个新表,这个新表的数据是根据另一个表通过时间筛选出来的,现在报如下图所示的错误,求大神指教[img=https://img-bbs.csdn.net/upload/201611/24/1479979073_750460.png][/img] ...
  • oracle 存储过程执行报错ORA-12828

    千次阅读 2017-11-15 16:32:12
    oracle 存储过程更新表内容使用update global indexes同步更新索引时 执行报错ORA-12828

        操作系统:windows server 2008R2

        数据库版本:oracle 11.2.0.3 单实例 

       今天,一开发同事找来,说他的存储过程在龙岩地市执行报错ORA-12828,说代码执行到如下代码块的时候报错退出:

    EXECUTE IMMEDIATE 'ALTER TABLE FACT_COSTS TRUNCATE PARTITION P_FACT_COSTS_'||PRM_MONTH||' update global indexes';

        查看oracle联机文档对ORA-12828的解释:

    [oracle@se31 ~]$ oerr ora 12828
    12828, 00000, "Can't start parallel transaction at a remote site"
    // *Cause: PDML transaction cannot be started because we are not in the
    //         coordinator site of the distributed transaction.
    // *Action: Do not use PDML at remote sites.
    [oracle@se31 ~]$ 

        查询oracle support知识库,有篇文档(ID 1535660.1)与ORA-12828相关

    APPLIES TO:

    Oracle Database - Enterprise Edition - Version 11.2.0.1.0 to 11.2.0.4 [Release 11.2]
    Information in this document applies to any platform.

    SYMPTOMS

    The remote parallel index rebuild runs serial even if enabling parallel replication propagation at the database link level. For example if a database link is created for a particular destination database, and enabling parallel propagation for a database link, then Oracle uses multiple parallel slave processes to replicate to the corresponding destination. But it doesn't work while parallel index rebuild remotely through a procedure. In detail:

    CAUSE

    As the Bug 14684769  states, this works as expected and it is not supported to parallelize the index by using the dblink.

    SOLUTION

    The dblink is not supported to parallelize the rebuild index.

    As per the fix for Bug 2166879, create index will not be compiled for parallel execution if it is being executed in a distributed txn.

    REFERENCES

    BUG:14684769  - REMOTE PARALLEL INDEX REBUILD RUNS SERIAL
    BUG:2166879  - ORA-12828 WHEN INDEX CREATED IN PARALLEL MODE THROUGH REMOTE PROCEDURE

        

        查看开发同事提供的代码并没有使用到dblink,根据oracle官方(ID 1535660.1)提示,ORA12828与索引重建有关,

    让开发同事尝试去掉update global indexes子句重新执行,可成功执行。其实更新表数据同步更新索引,是防止分区表分区索引失效。

    于是,建议他将索引重建子句去除,另外在存储过程中添加专门的索引重建语句(经他测试,可以执行)。

    另外,根据他提供的信息该代码并不是在所有地市都报错,只有目前的龙岩windows server 2008R2 oracle 11.2.0.3单实例下。



    展开全文
  • 使用ADOStoredProc调用Oracle存储过程,调用的时候总是报参数类型或者数量错误PLS-00306,但是我反复看了代码,类型跟数目都没问题,真是费解啊,请各位大侠帮忙看看到底问题出在哪里。 另:存储过程里最后一个...
  • create or REPLACE PROCEDURE proc_zcz_test(name varchar) as tname varchar(10); begin tname:= name; if tname = 'zcz'then ...小弟初学 存储过程,最近项目紧急临时学的 最后的 end 报错 是什么原因?
  • DEMO1: CREATE OR REPLACE PROCEDURE for_test AS i NUMBER; BEGIN ...----------------------------------------分割线-------------------------------- ...CREATE OR REPLACE ...ORACLE版本11G
  • oracle本地存储过程没问题,然后给测试线上编译都报错。。能不能帮我看看是什么原因。。 ``` create or replace procedure PROC_XXCJ_SJTJ_TEST is V_SQL VARCHAR2(2000); V_ERR VARCHAR2(100); ...
  • oracle数据库创建可自动执行的存储过程中,编译时,出现如下错误: PLS-00103: 出现符号 "end-of-file"在需要下列之一时: ( begin case declare end exception exit for goto if loop mod null pragma raise ...

    在oracle数据库创建可自动执行的存储过程中,编译时,出现如下错误:
    PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
    (
    begin case declare end exception exit for goto if loop mod
    null pragma raise return select update while with

    << continue close current delete fetch lock
    insert open rollback savepoint set sql execute commit forall
    merge pipe purge
    )
    存储过程代码:
    create or replace procedure proc_update_hysj
    as
    begin
    insert into hysj
    略…
    end;

    原因,少了分号。在begin执行代码中,用封号; 表示结束!
    create or replace procedure proc_update_hysj
    as
    begin
    insert into hysj
    略…
    ;
    end;

    执行存储过程:
    BEGIN
    proc_update_hysj();
    END;

    展开全文
  • 一共有三条插入语句,如果执行到第三条报错了,如何回滚之前1,2插入的数据呢? create or replace PROCEDURE ADDproduct(v_prouct_item_id in number,v_name in varchar2,v_discription in varchar2,v_xieyiqi ...
  • 执行报错: ORA-00923: 未找到要求的 FROM 关键字 ORA-06512: 在 "AICHNL.LD_JUNK_TEST1", line 10 ORA-06512: 在 line 2 过程如下: create or replace procedure ld_junk_test1 is v_sql varchar2(4000); v_...
  • 执行定时任务时报错: 不一定是权限问题,但肯定是存储过程执行的问题。我的存储过程带参数,我用测试存储...修改存储过程后(存储过程内部参数可以定义在执行过程中),就可以了附:我的存储过程代码:原来的:create...

    执行定时任务时报错:

    0818b9ca8b590ca3270a3433284dd417.png

    不一定是权限问题,但肯定是存储过程执行的问题。

    我的存储过程带参数,我用测试存储过程的代码放入了job的what值,eg:proc_update_tag_cor_id(v_cor=>:v_cor

    v_tag=>:v_tag

    );

    执行时没有传入参数值,所以执行不通过。

    修改存储过程后(存储过程内部参数可以定义在执行过程中),就可以了

    附:

    我的存储过程代码:

    原来的:

    create or replace procedure proc_update_tag_cor_id(

    c_course out sys_refcursor,

    v_tag_id in out edc_tag_course.id%type,

    v_cor_id in out edc_course.id%type)

    AUTHID CURRENT_USER

    is

    begin

    --查询“最新上市”tag的id

    select t.id into v_tag_id from edc_tag_course t where t.tag_name = '最新上市';

    if v_tag_id is null then

    dbms_output.put_line('“最新上市”标签不存在');

    return;

    else

    dbms_output.put_line('“最新上市”tagId is: '|| v_tag_id);

    end if ;

    --删除关联的最新课程

    delete from ( select * from edc_tag_course_id where tag_id= v_tag_id);

    --打开游标,获得最新课程的结果集

    open c_course for

    select t.id from (select id from edc_course order by create_time desc ) t where rownum <=5;

    --提取游标值

    fetch c_course into v_cor_id;

    while c_course %found loop

    dbms_output.put_line('new courses id is: '|| v_cor_id);

    insert into edc_tag_course_id values(sys_guid(),v_cor_id,v_tag_id);

    fetch c_course into v_cor_id;

    end loop;

    --关闭游标

    close c_course;

    commit;

    end proc_update_tag_cor_id;

    现在的:

    create or replace procedure proc_update_tag_cor_id        AUTHID CURRENT_USER        is                c_course  sys_refcursor;        v_tag_id  edc_tag_course.id%type;        v_cor_id  edc_course.id%type; begin     --查询“最新上市”tag的id     select t.id into v_tag_id from edc_tag_course t where t.tag_name = '最新上市';          if v_tag_id is null then        dbms_output.put_line('“最新上市”标签不存在');       return;     else        dbms_output.put_line('“最新上市”tagId is: '|| v_tag_id);     end if ;     --删除关联的最新课程     delete from ( select * from edc_tag_course_id where tag_id= v_tag_id);      --打开游标,获得最新课程的结果集      open c_course for      select t.id from (select id from edc_course order by create_time desc ) t where rownum <=5;      --提取游标值      fetch c_course into v_cor_id;      while c_course %found loop            dbms_output.put_line('new courses id is: '|| v_cor_id);            insert into edc_tag_course_id values(sys_guid(),v_cor_id,v_tag_id);      fetch c_course into v_cor_id;      end loop;      --关闭游标      close c_course; commit; end proc_update_tag_cor_id;

    展开全文
  • create or replace procedure p_stuinfo is v_sql varchar2(45); begin EXECUTE IMMEDIATE 'create table system.t_studentinfo( stuid varchar2(10), stuname varchar2(12), score varchar2(10) )'; ...
  • 过程CREATE OR REPLACE PROCEDURE P_TEST IS V_SQL VARCHAR2(2000); selected VARCHAR2(2000); qxmcCount integer; CURSOR CURSOR_1 IS SELECT DISTINCT qxmc FROM xt_instance where qxmc is not null; ...
  • Oracle中建立物化视图报错  今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed。  建视图的语句: create materialized view VW_XX refresh force on demand as ...
  • 出现这错误的话,存储过程还是会成功创建的,创建好后再逐个打开查找存储过程的问题 问题:基本上就是存储过程里面的表不存在,dblink 不存在 ,用户名.xx表 要么用户名不存在要么表不存在 创建好后,右键view...
  • oracle创建存储过程报错权限不足

    千次阅读 2019-05-07 10:08:15
    可以运行,但是放在存储过程中报错权限不足。 检查下用户a的权限 select * from user_sys_privs; select * from role_sys_privs; select * from user_tab_privs; 发现a的对象权限为空,角色权限有insert any ...
  • -- 替换或创建存储过程 CREATE OR REPLACE PROCEDURE doInentityData as --声明游标 存储ODS的有效数据 CURSOR datas IS SELECT --身份证号 person.CertiCode IDNumber, --姓名 person.PersonName pname, --...
  • --提档存储过程-- PROCEDURE nplsrevoke_to_s_app(in_appId in number, --流程id in_rcvblAmtId in number,--应收费用标识 in_empId in varchar2, --处理员工号,默认系统empid in_appSrc in varchar2, --申请...
  • 我在当前用户创建了一个存储过程并编译成功,然后调用 为什么报错 ora-06550:第4行第3列 pls 00201 必须声明标识符 代码如下 ``` 创建: create or replace procedure test_sse(v_num OUT VARCHAR2) IS BEGIN v_...
  • Oracle存储过程报错 statement ignored

    万次阅读 2018-07-31 18:02:45
    create or replace procedure p(v_a in number,v_b number,v_ret out number,v_temp out in number) is begin if (v_a&gt;v_b) then v_ret:=v_a; else v_ret:=v_b; end if; v_temp := v_t...
  • 使用listagg函数拼接了动态...测试存储过程报错: ![图片说明](https://img-ask.csdn.net/upload/201911/15/1573799082_791817.png) 把单独的建表语句在SQL窗口执行可以正常执行。 求问大神这种情况要怎么改!??
  • ORACLE存储过程报错

    2012-08-02 14:04:12
    CREATE OR REPLACE PROCEDURE ONOFFPOR IS BEGIN EXEC DBMS_MVIEW.REFRESH('ONOFF_MV',METHOD => 'FAST'); END; / Warning:Procedure created with compilation errors 请问这是什么情况啊
  • oracle存储过程中,默认是可以直接执行DML和DQL的,但是执行CREATE这种的DDL则需要借助EXECUTE IMMEDIATE 如: create or replace procedure CREATE_TABLE(CREATE_SQL VARCHAR2) IS BEGIN EXECUTE ...
  • # oracle存储过程 报错PLS-00103 create or replace procedure num_group is begin insert into caipiao(haoma) values round((select dbms_random.value(1,35) from dual),0); loop if (select count(*) ...
  • // 在命令请求对象设置存储过程名。 cmdRequest .setProcedure("T_PHM_DELETEDESKTOPNAVIGATION(:deskId, :desknavigationId, :out_mark)"); // 设置输入参数 cmdRequest.addDataParam("deskId", ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,156
精华内容 11,262
关键字:

oracle存储过程中create报错