精华内容
下载资源
问答
  • oracle创建一个测试用的大表

    千次阅读 2012-04-23 16:44:25
    从Thomas Kyte那本著名的《Oracle+9i&10g编程艺术:深入数据库体系结构》抄下来的 建表结构 create table test_objects nologging as select rownum id,a.* ...匿名块添加数据 declare l_cnt number; l_ro

    从Thomas Kyte那本著名的《Oracle+9i&10g编程艺术:深入数据库体系结构》抄下来的


    建表结构

    create table test_objects nologging as select rownum id,a.* from dba_objects where 1=2;


    匿名块添加数据

    declare
      l_cnt number;
      l_rows number:=&1;
    begin
      insert /*+ append */ into test_objects select rownum,a.* from dba_objects a;
      l_cnt:=sql%rowcount;
      commit;
      while(l_cnt<l_rows)
      loop
        insert /*+ append */ into test_objects select rownum+l_cnt,
               owner,object_name,subobject_name,
               object_id,data_object_id,
               object_type,created,last_ddl_time,
               timestamp,status,temporary,
               generated,secondary
               from test_objects
               where rownum<=l_rows-l_cnt;
               l_cnt:=l_cnt+sql%rowcount;
         commit;
       end loop;
     end;

    创建主键

    alter table test_objects add constraint test_objects_pk primary key (id);

    为CBO提供信息

    exec dbms_stats.gather_table_stats('PAOLOLIU','TEST_OBJECTS');


    展开全文
  • 我需要创建一个Oracle表,如果它不存在于Oracle数据库中,并且该表存在,那么不要执行任何操作,因此,如果我用两次或三次触发该查询,我写了一个在SQL Developer中工作的匿名块我没有在SQL开发中遇到任何异常。...

    我需要创建一个Oracle表,如果它不存在于Oracle数据库中,并且该表存在,那么不要执行任何操作,因此,如果我用两次或三次触发该查询,我写了一个在SQL Developer中工作的匿名块我没有在SQL开发中遇到任何异常。这是我写的下面的查询 -

    public static final String DATABASE_TABLE = "LnPData";

    public static final String CREATE_SQL = "DECLARE " +

    "t_count INTEGER; " +

    "v_sql VARCHAR2(1000) := 'create table " +DATABASE_TABLE +

    "(ID number(10,0), " +

    "CGUID VARCHAR(255), " +

    "PGUID VARCHAR(255), " +

    "SGUID VARCHAR(255), " +

    "USERID VARCHAR(255), " +

    "ULOC VARCHAR(255), " +

    "SLOC VARCHAR(255), " +

    "PLOC VARCHAR(255), " +

    "ALOC VARCHAR(255), " +

    "SITEID VARCHAR(255), " +

    "PRIMARY KEY ( ID ))'; " +

    "BEGIN " +

    "SELECT COUNT(*) " +

    "INTO t_count " +

    "FROM user_tables " +

    "WHERE table_name = '" +DATABASE_TABLE + "'; " +

    "IF t_count = 0 THEN " +

    "EXECUTE IMMEDIATE v_sql; " +

    "END IF; " +

    "END; ";我在我的java代码中执行上述sql查询 - 第一次运行我的程序时,表被创建,但第二次当我尝试运行相同的程序时,我总是得到下面的异常。

    // get the connection

    LnPDataConstants.DB_CONNECTION = getDBConnection();

    LnPDataConstants.STATEMENT = LnPDataConstants.DB_CONNECTION.createStatement();

    LnPDataConstants.STATEMENT.executeUpdate(LnPDataConstants.CREATE_SQL);我总是得到sql异常as-

    SQL Error: ORA-00955: name is already used by an existing object

    00955. 00000 - "name is already used by an existing object"任何建议为什么会发生在Java代码中?

    附:我不想丢掉桌子

    更新的代码: -

    public static final String CREATE_SQL = "CREATE TABLE IF NOT EXISTS " +DATABASE_TABLE +

    "(ID number(10,0), " +

    " CGUID VARCHAR(255), " +

    " PGUID VARCHAR(255), " +

    " SGUID VARCHAR(255), " +

    " USERID VARCHAR(255), " +

    " ULOC VARCHAR(255), " +

    " SLOC VARCHAR(255), " +

    " PLOC VARCHAR(255), " +

    " ALOC VARCHAR(255), " +

    " SITEID VARCHAR(255), " +

    " PRIMARY KEY ( ID ))";

    展开全文
  • 目标本课涵盖以下目标:•描述PL / SQL的结构识别不同类型的PL / SQL•确定PL / SQL编程环境•创建并执行匿名PL / SQL•在PL / SQL中输出消息一、目的当你把东西放进一个盒子时,你直观地知道该盒子具有一致的...

    一、PL / SQL块结构

    一个PL / SQL块由三部分组成。


    PL / SQL块结构部分



    二、PL / SQL编译器

        用高级编程语言(C,Java,PL / SQL等)编写的每个程序都必须经过检查并转换为二进制代码(1和0),然后才能执行。 执行此检查和翻译的软件称为编译器。


        PL / SQL编译器在需要时自动执行。 它不仅检查每个单词拼写是否正确,而且还检查是否存在任何引用的数据库对象(如表),并且用户具有访问它们的必要特权。


    三、匿名块

    (1)匿名块的特征
    •未命名的块
    •未存储在数据库中
    •在其执行的应用程序中的内部声明为内联
    •每次执行应用程序时编译
    •传递给PL / SQL引擎以在运行时执行

    •无法调用或调用,因为它没有名称,执行后不存在

    [DECLARE]
    BEGIN
     --statements
    [EXCEPTION]
    END;
    (2)匿名块的例子

    没有声明或异常部分,只执行

    BEGIN
     DBMS_OUTPUT.PUT_LINE('PL/SQL is easy!');
    END;
    

    宣言和执行部分,但没有例外部分

    DECLARE
     v_date DATE := SYSDATE;
    BEGIN
     DBMS_OUTPUT.PUT_LINE(v_date);
    END;

    宣言和例外部分

    DECLARE
        v_country_name VARCHAR2(40);
        v_region_id NUMBER;
    BEGIN
        SELECT country_name, region_id
            INTO v_country_name, v_region_id
            FROM countries WHERE country_id='CA';
        DBMS_OUTPUT.PUT_LINE ('The country name is: '||v_country_name||' and is located in '||v_region_id||'.') ;
    EXCEPTION
        WHEN TOO_MANY_ROWS THEN
        DBMS_OUTPUT.PUT_LINE ('Your select statement retrieved multiple rows. Consider using a cursor.');
    END;


    四、子程序

    (1)子程序
    •命名为PL / SQL块
    •存储在数据库中

    •可以根据您的应用程序随时调用

    •可以声明为程序或功能
    - 过程:执行操作
    - 功能:计算并返回一个值

    PROCEDURE name
    IS
     --variable declaration(s)
    BEGIN
     --statements
    [EXCEPTION]
    END;
    FUNCTION name
    RETURN datatype
     --variable declaration(s)
    IS
    BEGIN
     --statements
     RETURN value;
    [EXCEPTION]
    END;
    (2)子程序的例子

    打印当前日期的过程

    CREATE PROCEDURE print_date IS
     v_date VARCHAR2(30);
    BEGIN
     SELECT TO_CHAR(SYSDATE,'Mon DD, YYYY')
     INTO v_date
     FROM DUAL;
     DBMS_OUTPUT.PUT_LINE(v_date);
    END;
    

    函数返回字符串中的字符数

    CREATE PROCEDURE print_date IS
     v_date VARCHAR2(30);
    BEGIN
     SELECT TO_CHAR(SYSDATE,'Mon DD, YYYY')
     INTO v_date
     FROM DUAL;
     DBMS_OUTPUT.PUT_LINE(v_date);
    END;
    CREATE FUNCTION num_characters (p_string IN VARCHAR2)
     RETURN INTEGER IS
     v_num_characters INTEGER;
    BEGIN
     SELECT LENGTH(p_string) INTO v_num_characters
     FROM DUAL;
     RETURN v_num_characters;
    END;


    五、程序构造

    下表概述了使用基本PL / SQL块的各种不同的PL / SQL程序结构。 这些构造是基于它们被执行的环境而提供的。



    六、PL / SQL编程环境

    有许多工具为环境提供了一个环境开发PL / SQL。 Oracle提供了几种工具可以使用。 一些Oracle开发工具是:



    七、Oracle Application Express

    Oracle Application Express是一个基于浏览器的Web应用程序环境,它提供了SQL Workshop组件。



    八、使用SQL Workshop进行开发

    当您登录到Oracle Application Express并选择SQL Workshop时,可以选择使用SQL命令选项来使用SQL命令行编辑器,也可以选择SQL脚本选项在脚本编辑器中工作。



    九、SQL命令

    您可以使用SQL命令输入并运行单个SQL语句或单个PL / SQL块。 SQL脚本可以包含一个或多个SQL语句和/或PL / SQL块。 使用SQL脚本输入并运行多语句脚本。



    使用DBMS_OUTPUT.PUT_LINE示例
    看看这个简单的PL / SQL块和它的输出。 你如何显示结果?



    使用DBMS_OUTPUT.PUT_LINE

    让我们添加一个对DBMS_OUTPUT.PUT_LINE的调用。 现在你可以看到结果!



    DBMS_OUTPUT.PUT_LINE允许您显示结果,以便您可以检查您的块是否正常工作。 它允许您一次显示一个字符串,但可以将它们连接起来。

    DECLARE
     v_emp_count NUMBER;
    BEGIN
     DBMS_OUTPUT.PUT_LINE('PL/SQL is easy so far!');
     SELECT COUNT(*) INTO v_emp_count FROM employees;
     DBMS_OUTPUT.PUT_LINE('There are '||v_emp_count||'
     rows in the employees table');
    END;


    展开全文
  • 创建JOB scheduler是oracle10g的新特性 通过DBMS_SCHEDULER.CREATE_JOB来创建job,参数说明: JOB_NAME :指定任务的名称,必选值,...PLSQL_BLOCK :表示任务执行的是一个PL/SQL匿名块。 STORED_PROCEDURE :表示任

    创建JOB

    scheduler是oracle10g的新特性

    通过DBMS_SCHEDULER.CREATE_JOB来创建job,参数说明:

    JOB_NAME :指定任务的名称,必选值,注意要确保指定的名称唯一。
    JOB_TYPE :任务执行的操作类型,必选值,有下列几个可选值:
    PLSQL_BLOCK :表示任务执行的是一个PL/SQL匿名块。
    STORED_PROCEDURE :表示任务执行的是ORACLE过程(含PL/SQL PROCEDURE和JAVA PROCEDURE),本例中正是指定这一参数值。
    EXECUTABLE :表示任务执行的是一个外部程序,比如说操作系统命令。
    CHAIN :表示任务执行的是一个CHAIN。
    JOB_ACTION :任务执行的操作,必选值,应与JOB_TYPE类型中指定的参数相匹配。
    比如说对于PL/SQL匿名块,此处就可以放置PL/SQL块的具体代表,类似DECLARE .. BEGIN ..END这类;如果是ORACLE过程,那么此处应该指定具体的过程名,注意由于任务执行,即使过程中有OUT之类参数,实际执行时也不会有输出的。


    START_DATE :指定任务初次执行的时间,本参数可为空,当为空时,表示任务立刻执行,效果等同于指定该参数值为SYSDATE。
    REPEAT_INTERVAL :指定任务执行的频率,比如多长时间会被触发再次执行。本参数也可以为空,如果为空的话,就表示当前设定的任务只执行一次。REPEAT_INTERVAL参数需要好好说说,因为这一参数与标准JOB中的INTERVAL参数有很大区别,相比之下,REPEAT_INTERVAL参数的语法结构要复杂的多。其中最重要的是FREQ和INTERVAL两个关键字。
    FREQ 关键字用来指定间隔的时间周期,可选参数有:YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, and SECONDLY,分别表示年、月、周、日、时、分、秒等单位。
    INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-99。
    例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天执行一次,如果将INTERVAL改为7就表示每7天执行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。


    一般来说,使用DBMS_SCHEDULER.CREATE_JOB创建一个JOB,至少需要指定上述参数中的前3项。除此之外,还可以在CREATE_JOB时,指定下列参数:


    NUMBER_OF_ARGUMENTS :指定该JOB执行时需要附带的参数的数量,默认值为0,注意当JOB_TYPE列值为PLSQL_BLOCK或CHAIN时,本参数必须设置为0,因为上述两种情况下不支持附带参数。
    END_DATE :指定任务的过期时间,默认值为NULL。任务过期后,任务的STATE将自动被修改为COMPLETED,ENABLED被置为FALSE。如果该参数设置为空的话,表示该任务永不过期,将一直按照REPEAT_INTERVAL参数设置的周期重复执行,直到达到设置的MAX_RUNS或MAX_FAILURES值。
    JOB_CLASS :指定任务关联的CLASS,默认值为DEFAULT_JOB_CLASS。关于JOB CLASS的信息就关注本系列的后续文章。
    ENABLED :指定任务是否启用,默认值为FALSE。FALSE状态表示该任务并不会被执行,除非被用户手动调用,或者用户将该任务的状态修改为TRUE。
    AUTO_DROP :当该标志被置为TRUE时,ORACLE会在满足条件时自动删除创建的任务
    任务已过期;
    任务最大运行次数已达MAX_RUNS的设置值;
    任务未指定REPEAT_INTERVAL参数,仅运行一次;
    该参数的默认值即为TRUE。用户在执行CREATE_JOB过程时可以手动将该标志指定为FALSE,当参数值设置为FALSE时,即使满足上述提到的条件任务也不会被自动删除,这种情况下,唯一能够导致任务被删除的情况,就是用户主动调用DROP_JOB过程。


    COMMENTS :设置任务的注释信息,默认值为NULL。
    创建JOB
    DECLARE
    BEGIN
       DBMS_SCHEDULER.CREATE_JOB (JOB_NAME          => 'UPDATE_DEMOT',
                                  JOB_TYPE          => 'STORED_PROCEDURE',
                                  JOB_ACTION        => 'ADDDEMOT',
                                  START_DATE        => SYSDATE,
                                  REPEAT_INTERVAL   => 'FREQ=SECONDLY;INTERVAL=5');
    END;
    创建完成之后,默认是不会执行的,状态是ENABLED,可以通过下面语句来查询
    SELECT JOB_NAME,JOB_TYPE,JOB_ACTION,REPEAT_INTERVAL,STATE FROM user_scheduler_jobs;
    如果想创建时就开始启用JOB,可以在上述创建时,添加属性ENABLED=>TRUE
    或者现在
    EXEC DBMS_SCHEDULER.ENABLE('UPDATE_DEMOT');
    同理禁用的时候,调用DISABLE
    那么创建完JOB后,有可能创建的时候,遗漏了一些JOB的属性,现在也可以直接更改JOB的某些属性:
    EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('UPDATE_DEMOT','REPEAT_INTERVAL','FREQ=SECONDLY;INTERVAL=1');






    详情了解,点击这里:http://space.itpub.net/7607759/viewspace-611283












    展开全文
  • PL/SQL块中还可以包含其他子块,即... 让我们来研究下下面的这个例子,创建一个带有两个嵌套块的匿名块,且这两个嵌套块是在同一个嵌套层次上。 DECLARE v_neusoft AUTHORS.FIRST_NAME%TYPE;BEGIN -- the first n
  • 过程是一段不具有返回值的代码块,而函数会返回一个值。子程序与匿名块的最大不同是它可以存储到数据库的数据字典中,以便重用。 过程一旦被创建,就以编译的形式被存储在数据库中,这样就可以从别的PL/SQL命名块...
  • Oracle入门笔记

    2019-03-08 00:02:23
    目录 创建用户 角色与权限 事务 约束 表空间 增删改查 序列 伪列 修改表结构 ...匿名块 ...本文章内容为同步Oracle笔记,方便在线查看,由问题还请指出,随时更新。...创建用户 ...一个实例只有一...
  • Mysql和oracle区别

    千次阅读 2016-04-17 20:59:44
    1)mysql不支持匿名块,没法像oracle一样使用匿名块方便地执行脚本,只能先创建一个存储过程,然后执行,删除; 2)mysql的declare在begin内部声明,不像oracle在begin外部声明; 声明变量方式: DECL
  • oracle 自治事务

    2013-08-21 23:17:22
    oracle 自治事务可以使事务相对于父事务独立。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些动作,然后提交或回滚...我们来学习一下自治事务的使用方法,实例如下所示,先创建一个表,分别用自治事
  • oracle求解

    2012-12-13 22:07:24
    a)创建一过程cal_sum_n,用于计算1+2+...编写一匿名块,在其中调用cal_sum_n,计算输出1+2+…10,1+2+…11,1+2+…12,……,1+2+…20的和。 b)将上题中cal_sum_n改为只用一个输入输出参数n。 c)通过复制depart...
  • 自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所...
  • 2.创建临时表temp,字段:char_store varchar2(35), date_store date创建匿名块, 1)把两变量 'This is my first pl/sql program',current date插入到表中  2)10号部门员工姓名,参加工作时间插入到表中 3.对...
  • ORACLE 程序包

    2017-08-17 17:04:00
    程序包由PL/SQL程序元素(变量,类型)和匿名PL/SQL(游标),命名PL/SQL (存储过程和函数)组成。 程序包可以被整体加载到内存中,这样可以大大加快...创建一个程序包“规范”,首先在该程序中声明一个可以获...
  • 目录一、实验步骤与结果1、定义一个匿名块,查询雇佣日期比雇员...(要求分别用两种方法完成:自定义的记录类型变量和%rowtype定义变量)3、按如下步骤实现功能4、定义一个匿名块,实现如下功能5、创建一个脚本文件lab1
  • Oracle程序包

    2017-06-17 16:18:13
    程序包可以被整体加载到内存中,这样就可以大大加快程序包中任何一个组成部分的访问速度。 1、程序包的规范 该“规范”用于规定在程序包中可以使用哪些变量、类型、游标和子程序(指各种命名的PL/SQL),需要注意...
  • Oracle的自治事务

    2017-01-03 13:15:14
    自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所...
  • Oracle-程序包

    2016-03-03 15:52:00
    程序包由PL/SQL程序元素(变量,类型)和匿名PL/SQL(游标),命名PL/SQL (存储过程和函数)组成。 程序包可以被整体加载到内存中,这样可以大大加快...创建一个程序包“规范”,首先在该程序中声明一个可以获...
  • Oracle PL/SQL 程序设计读书笔记 - 第3章 语言基础 ...PL/SQL允许我们创建匿名块,和命令块。命名的块可以是包,过程,函数,解发器或者对象类型。 一个PL/SQL块最多可以由4个不同的单元组成。 块头(Heade...
  • 创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。
  •  PL/SQL程序可以是一个匿名程序也可以是一个命名的程序。  Oracle提供了四种类型的子程序:过程、函数、包和触发器。   --2. 过程  过程是存储在数据库中的一段存储程序,有时也定义为存储过程。当...
  • 编写一个函数,根据传入的部门,统计出该部门的总工资和员工人数,并将统计值返回,同时,编写一个匿名块,测试此函数的正确性 1.创建type,用来存储查询结果 createor replace type tp_emp as object(sum ...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... 有一个生命的奇迹持续不断地让我们感到惊奇,那就是孩子发现、适应并了解其周围世界的能力。他们每天晚上花费平均10~12小时睡觉并不让我们感到惊奇。此外,他们的两...
  • ORACLE计划(schedule)详解

    千次阅读 2010-02-05 11:45:00
    创建jobjob是什么呢? 简单的说就是计划(schedule)加上任务说明. 另外还有一些必须的参数....可以有两种方式来定义"计划":1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划;2) 调用DBMS_SCHDULER.CREATE
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Oracle Database 11g PL/SQL编程实战》的随书源代码 对应的书籍资料见: ... 有一个生命的奇迹持续不断地让我们感到惊奇,那就是孩子发现、适应...
  • DBMS_SCHEDULER是Oracle 10G中新增的一个包,与老版本的dbms_job包相比,dbms_scheduler有很多新特性,我将通过一系列的文章来介绍一下如何使用这个包. 1. 创建job job是什么呢? 简单的说就是计划(schedule)加上...
  • 对于一个PL/SQL应用程序来说,影响性能的原因是来自多方面的,比如不良的编程方法,数据库对象本身的构建不合理,表或索引的构建等都可能导致PL/SQL性能低下。 这里总结了一些常见的影响性能的原因以及提高性能的...
  • ORACLE调度(schedule)详解(转)

    万次阅读 2012-12-14 15:26:17
    part 1 ...1. 创建job ... 简单的说就是计划(schedule)加上任务说明....这里提到的"任务"可以是数据库内部的存储过程,匿名的PL/SQL,也可以是操作系统级别...1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划; 2)

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

oracle创建一个匿名块