当前位置:首页 » 编程软件 » oracle预编译sql

oracle预编译sql

发布时间: 2022-06-28 11:18:46

‘壹’ oracle rownum=1与rownum<2;哪个效率更高

一样的,
oracle把提交上来的sql语句进行预编译,结果都是取第一行的数据。

‘贰’ 有个SQL,在pl/sql上执行第一次要40来秒,后面执行就只要1秒不到,怎么样才能让第一次执行就很快呢

先告诉下你oracle中sql处理机制吧
像你说的这个情况,就是oracle中的预编译sql过程,它会将你运行过的sql当做一个模板存在内存里,当你下次运行结构与这个sql一样的语句时,然后就直接使用之前的那个sql的缓存,然后换一下where条件的参数值,跳过了后面的很多处理过程,所以你会发现后面再运行类似的sql,处理效率会高很多。

根据我上面的推断,想让sql第一次执行快,只能是让查出来的结果集尽可能的少,但又不能改变它的sql结构,否则就错了。。

‘叁’ 在oracle中PreparedStatement中的addbatch()如何使用啊分就这些了,大家帮帮忙吧!谢谢了

PreparedStatement.addbatch()的使用
Statement和PreparedStatement的区别就不多废话了,直接说PreparedStatement最重要的addbatch()结构的使用.

1.建立链接
Connection connection =getConnection();

2.不自动 Commit
connection.setAutoCommit(false);

3.预编译SQL语句,只编译一回哦,效率高啊
PreparedStatement statement = connection.prepareStatement("INSERT INTO TABLEX VALUES(?, ?)");

//记录1
statement.setInt(1, 1);
statement.setString(2, "Cujo");
statement.addBatch();

//记录2
statement.setInt(1, 2);
statement.setString(2, "Fred");
statement.addBatch();

//记录3
statement.setInt(1, 3);
statement.setString(2, "Mark");
statement.addBatch();

//批量执行上面3条语句.
int [] counts = statement.executeBatch();

//Commit it 到(DB)里面

‘肆’ 如何使用oracle10g的预编译器proc.exe,将pro*c文件编译为c文件

proc iname=11.pc oname=11.c include=$ORACLE_HOME/precomp/public /*生成.c文件 cc -c -I$ORACLE_HOME/plsql/public 11.c /*生成.o文件 cc -L$ORACLE_HOME/lib -lclntsh -o lisai0 11.o /*生成可执行文件lisai0

‘伍’ oracle批量执行sql文件为什么快

因为可以把批量的sql进行预编译 放在数据库内存中 如果调用 直接向数据库发送命令就可以了

‘陆’ oracle的预编译pro.exe在哪

Oracle至少提供了两种不同的C语言接口:一个叫做OCI(Oracle Call Interface),这主要是科学家的领域,另一个就是Pro*C。OCI提供了上百个函数,就算只是一个SQL查询请求,也需要编写像打开、解析、绑定、定义、执行、提取结果等这些低层次的代码。即便是最简单的OCI程序也需要近200行长的代码,我还是演示一个Pro*C的例子吧。Pro*C是一个预编译的技术,你可以编写一个同时包括C、SQL、PL/SQL的混合源代码文件。通过在Oracle的proc程序中运行下面代码,输出的是C代码。
/* File on web: callbooktitle.pc */ #include <stdio.h> #include <string.h> EXEC SQL BEGIN DECLARE SECTION; VARCHAR uid[20]; VARCHAR pwd[20]; VARCHAR isbn[15]; VARCHAR btitle[400]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE SQLCA.H; int sqlerror(); int main() { /* VARCHARs actually become a struct of a char array and a length */ strcpy((char *)uid.arr,"scott"); uid.len = (short) strlen((char *)uid.arr); strcpy((char *)pwd.arr,"tiger"); pwd.len = (short) strlen((char *)pwd.arr); /* this is a cross between an exception and a goto */ EXEC SQL WHENEVER SQLERROR DO sqlerror(); /* connect and then execute the function */ EXEC SQL CONNECT :uid IDENTIFIED BY :pwd; EXEC SQL EXECUTE BEGIN :btitle := booktitle('0-596-00180-0'); END; END-EXEC; /* show me the money */ printf("%s\n", btitle.arr); /* Disconnect from ORACLE. */ EXEC SQL COMMIT WORK RELEASE; exit(0); } sqlerror() { EXEC SQL WHENEVER SQLERROR CONTINUE; printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE; exit(1); }

正像你看到的那样,Pro*C并不是一个追求纯粹的语言家所支持的,你也不想和这种方式生成的C代码搅合在一起。然而,很多企业发现Pro*C(或者像Pro*Cobol等Oracle支持的语言)是位于像Visual Basic(太笨重和缓慢的一个语言)和OCI(太难了)中间的一个比较合适的选择。
从Oracle自己的文档中,可以找到关于Pro*C的最好信息。

‘柒’ java程序怎样执行sql文件创建oracle表

代码样例:
String sql = "create table tablename(id number, title varchar2(20), intro varchar2(200), time timestamp)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.execute();
解析:
建表语句与oracle建表语句相同。主要的点是java程序与数据库连接及数据交互的过程代码。
PreparedStatement与Statement区别:
statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,preparedstatement支持批处理。

‘捌’ oracle 中的包是什么

在一个大型项目中,有很多模块,每个模块都可能有很多的过程和函数,这些过程和函数默认就是放在一起,不方便查询和维护,甚至会发生误删除的事件。

所以通过使用包,就可以分类管理过程和函数。

使用包还有一个好处,就是可以在包中定义自定义类型,从而在过程和函数可以直接用于定义变量。

包的概念与java程序中包的概念是非常类似的,java程序中包也是为了分类管理不同的类,关键字都是package。
(1)包的意义

PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包的构造。

包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位。包有两个部分:包说明(specification)和包体(body)。说明部分是为应用程序的接口,它申明类型、常量、例外、游标和可用的子程序。体定义游标和子程序,实现说明。应用程序仅对包说明中的申明是可见的和可存取。如果ORACLE具有Procere选件,包可以编译、存贮在ORACLE数据库中,其内容可为许多应用共享。当用户第一次调用一包装的子程序时,整个包装入到内存,所以在以后对包中子程序调用时,不再需要I/O操作,故包可提高效率和改进性能。

PL/SQL的包具有信息隐蔽性(information hiding),仅在算法和数据结构设计有关层可见。在前面讲到的过程中,可将过程说明和过程体组成一个程序单位。也可将过程说明与它的过程体分开,在这种情况下,将过程放置在一个包中,可隐蔽实现的细节。也可在包中定义过程,而该过程在包说明中没有定义过程说明,这样定义的过程仅在包内使用。

(2)包的定义

包的定义形式如下:

包说明:

PACKAGE 包名 IS

--变量说明;

--游标说明;

--例外说明;

--记录说明;

--Plsql表说明;

--过程说明;

--函数说明;

END[包名];

包体:

PACKAGE BODY 包名 IS

--变量名说明;

--游标说明;

--游标申明;

--例外说明;

--记录说明;

--plsql说明;

--过程体;

--函数体;

BEGIN

--语句序列

END[包名];

其中,包名为命名包的标识符。

包不能嵌入在PL/SQL块或子程序中,然而使用支持PL/SQL的任何工具可定义包。要使包为全体使用,必须用CREATE命令建立,存贮在一个ORACLE数据库中。可在SQL*PLUS、SQL*DBA或从ORACLE预编译宿主程序中利用CREATE PACKAGE和CREATE PACKAGE BODY 语句建立。

例 2.52: 建立包:

.包说明建立

CREATE PACKAGE emp_actions AS

TYPE EMPRECTYP IS RECORD(emp_id INTEGER,salary REAL);

CURSOR desc_salary(emp_id NUMBER)RETURN EMPRECTYP;

PROCEDURE hire_employee

(ename CHAR,

job CHAR,

sal NUMBER,

mgr NUMBER,

comm NUMBER,

deptno NUMBER;

PROCEDURE fire_employee(emp_id NUMBER);

END emp_actions;

(A):其中语句TYPE EMPRECTYP IS RECORD(emp_id. INTEGER,Salary REAL)是指用户定义EMPRECTYP为RECORD(记录)类型对象。用户定义记录

的一般格式是:

TYPY 类型名 IS RECORD

(字段名1{字段类型|变量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],

字段名2{字段类型|变量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],...);其中:类型名为类型说明符,可在记录说明中使用。字段

类型为PL/SQL允许的任何数据类型,包括RECORD类型和TABLE(表)类型。可用%TYPE或%ROWTYPE属性指定一字段的数据类型。

利用%TYPE属性可提供变量,常量或数据库列的数据类型。例如变量my_dname是同SCOTT的DEPT表的DNAME列类型相同,则可如下定义:

my_dname SCOTT.dept.danme%TYPE ,%ROWTYPE属性提供一记录类型,它表示一表(或视图)中的一行。记录可存贮由表所选择的一整行或者由

一游标所获取的一整行。例如:

DECLARE

emp_rec emp% ROWTYPE;

CURSOR C1 IS SELECT deptno,dname,loc FROM dept;

dept_rec C1%ROWTYPE;

其中 emp_rec记录可存贮从表EMP中选择的行,dept_rec记录可存贮由C1游标所获取的行。这样定义的记录中的字段与行中列有相同的名和相同数据类型。记录中的字段可以下列形式引用:

记录名.字段名

emp_rec.ename:=’JOHNSON’;

‘玖’ oracle 存储过程中的sql语句可以象java一样写成预编译吗

如果加载一些内容,加载设置算的话,可以的,就是格式语言啥的不一样

热点内容
仙方一般是什么配置 发布:2024-05-18 18:53:43 浏览:158
黑莓安卓手机主题下载到哪里 发布:2024-05-18 18:47:18 浏览:56
汤靖轩编程 发布:2024-05-18 18:46:04 浏览:532
脚本故事梗 发布:2024-05-18 18:29:02 浏览:822
安卓和csharp哪个发展好 发布:2024-05-18 18:09:30 浏览:527
换编程题库 发布:2024-05-18 18:00:58 浏览:562
如何使用服务器ip直连网站 发布:2024-05-18 18:00:49 浏览:432
三星n7100哪个安卓版本好用 发布:2024-05-18 17:55:41 浏览:490
万国觉醒采集脚本源码 发布:2024-05-18 17:55:39 浏览:947
sqlserver加字段 发布:2024-05-18 17:54:53 浏览:928