-
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');
-
java 创建oracle表_如果Oracle中不存在,则创建一个表(使用Java)
2021-03-06 18:37:45我需要创建一个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 ))";
-
Oracle入门(十四.3)之创建PL / SQL块
2018-05-31 08:56:06目标本课涵盖以下目标:•描述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引擎以在运行时执行•无法调用或调用,因为它没有名称,执行后不存在
(2)匿名块的例子[DECLARE] BEGIN --statements [EXCEPTION] END;
没有声明或异常部分,只执行
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;
(2)子程序的例子FUNCTION name RETURN datatype --variable declaration(s) IS BEGIN --statements RETURN value; [EXCEPTION] 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 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;
-
oracle job,通过DBMS_SCHEDULER.CREATE_JOB来创建,管理也通过DBMS_SCHEDULER这个包来管理
2013-04-15 16:45:05创建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 -
Oracle Database 10g PL/SQL Programming - PL/SQL块之嵌套块异常处理规则
2009-12-09 16:27:00PL/SQL块中还可以包含其他子块,即... 让我们来研究下下面的这个例子,创建一个带有两个嵌套块的匿名块,且这两个嵌套块是在同一个嵌套层次上。 DECLARE v_neusoft AUTHORS.FIRST_NAME%TYPE;BEGIN -- the first n -
Oracle PL/SQL进阶编程(第一弹:子程序结构)
2017-09-19 22:48:42过程是一段不具有返回值的代码块,而函数会返回一个值。子程序与匿名块的最大不同是它可以存储到数据库的数据字典中,以便重用。 过程一旦被创建,就以编译的形式被存储在数据库中,这样就可以从别的PL/SQL命名块... -
Oracle入门笔记
2019-03-08 00:02:23目录 创建用户 角色与权限 事务 约束 表空间 增删改查 序列 伪列 修改表结构 ...匿名块 ...本文章内容为同步Oracle笔记,方便在线查看,由问题还请指出,随时更新。...创建用户 ...一个实例只有一... -
Mysql和oracle区别
2016-04-17 20:59:441)mysql不支持匿名块,没法像oracle一样使用匿名块方便地执行脚本,只能先创建出一个存储过程,然后执行,删除; 2)mysql的declare在begin内部声明,不像oracle在begin外部声明; 声明变量方式: DECL -
oracle 自治事务
2013-08-21 23:17:22oracle 自治事务可以使事务相对于父事务独立。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些动作,然后提交或回滚...我们来学习一下自治事务的使用方法,实例如下所示,先创建一个表,分别用自治事 -
oracle求解
2012-12-13 22:07:24a)创建一过程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... -
oracle自治事务的写法_Oracle的自治事务
2020-12-29 00:08:04自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚。利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些工作,然后提交或回滚,所有这些都不影响当前所... -
【Oracle强化】①第一章 PL/SQL概述
2014-08-08 20:01:452.创建临时表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 块(存储过程和函数)组成。 程序包可以被整体加载到内存中,这样可以大大加快...创建一个程序包“规范”,首先在该程序中声明一个可以获... -
Oracle-实验10(PL/SQL基础2)
2020-07-31 21:54:34目录一、实验步骤与结果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章 语言基础
2011-11-08 23:45:00Oracle PL/SQL 程序设计读书笔记 - 第3章 语言基础 ...PL/SQL允许我们创建匿名块,和命令块。命名的块可以是包,过程,函数,解发器或者对象类型。 一个PL/SQL块最多可以由4个不同的单元组成。 块头(Heade... -
Oracle中怎样用自治事务保存日志表
2020-03-03 23:36:17要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL Server语句都是自治的。 -
(oracle数据库基础)第七章 PL/SQL子程序设计
2012-04-23 00:34:43PL/SQL程序块可以是一个匿名程序块也可以是一个命名的程序块。 Oracle提供了四种类型的子程序:过程、函数、包和触发器。 --2. 过程 过程是存储在数据库中的一段存储程序,有时也定义为存储过程。当... -
oracle 仅有多行函数的搜索语句 不会报no_data_found的exception
2015-03-18 16:46:16编写一个函数,根据传入的部门,统计出该部门的总工资和员工人数,并将统计值返回,同时,编写一个匿名块,测试此函数的正确性 1.创建type,用来存储查询结果 createor replace type tp_emp as object(sum ... -
Oracle Database 11g PL/SQL编程实战--详细书签版
2013-02-04 13:54:02CruiseYoung提供的带有详细书签的电子书籍目录 ... 有一个生命的奇迹持续不断地让我们感到惊奇,那就是孩子发现、适应并了解其周围世界的能力。他们每天晚上花费平均10~12小时睡觉并不让我们感到惊奇。此外,他们的两... -
ORACLE计划(schedule)详解
2010-02-05 11:45:00创建jobjob是什么呢? 简单的说就是计划(schedule)加上任务说明. 另外还有一些必须的参数....可以有两种方式来定义"计划":1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划;2) 调用DBMS_SCHDULER.CREATE -
Oracle Database 11g PL/SQL编程实战--随书源代码
2013-02-04 14:07:33CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Oracle Database 11g PL/SQL编程实战》的随书源代码 对应的书籍资料见: ... 有一个生命的奇迹持续不断地让我们感到惊奇,那就是孩子发现、适应... -
【转】Oracle 10g DBMS_SCHEDULER的中度解析
2011-02-18 00:10:05DBMS_SCHEDULER是Oracle 10G中新增的一个包,与老版本的dbms_job包相比,dbms_scheduler有很多新特性,我将通过一系列的文章来介绍一下如何使用这个包. 1. 创建job job是什么呢? 简单的说就是计划(schedule)加上... -
Oracle PL/SQL高级编程(第四弹:性能优化:提高PL/SQL程序性能的一些编程习惯)
2018-08-13 00:24:36对于一个PL/SQL应用程序来说,影响性能的原因是来自多方面的,比如不良的编程方法,数据库对象本身的构建不合理,表或索引的构建等都可能导致PL/SQL性能低下。 这里总结了一些常见的影响性能的原因以及提高性能的... -
ORACLE调度(schedule)详解(转)
2012-12-14 15:26:17part 1 ...1. 创建job ... 简单的说就是计划(schedule)加上任务说明....这里提到的"任务"可以是数据库内部的存储过程,匿名的PL/SQL块,也可以是操作系统级别...1) 使用DBMS_SCHDULER.CREATE_SCHEDULE 定义一个计划; 2)