當前位置:首頁 » 編程軟體 » 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一樣寫成預編譯嗎

如果載入一些內容,載入設置算的話,可以的,就是格式語言啥的不一樣

熱點內容
鎮江節點伺服器測試ip 發布:2024-05-06 07:15:05 瀏覽:540
sqlserver表格 發布:2024-05-06 07:09:54 瀏覽:612
雪鐵龍凡爾賽選哪個配置 發布:2024-05-06 06:56:04 瀏覽:571
福睿斯配置怎麼樣 發布:2024-05-06 06:50:16 瀏覽:103
微生物資料庫 發布:2024-05-06 06:47:33 瀏覽:605
原神和steam游戲哪個需要配置 發布:2024-05-06 06:37:40 瀏覽:666
nginx訪問403 發布:2024-05-06 05:56:39 瀏覽:677
android上傳圖片參數 發布:2024-05-06 05:56:04 瀏覽:221
360控制上傳流量 發布:2024-05-06 05:38:11 瀏覽:999
幾代演算法 發布:2024-05-06 05:33:43 瀏覽:353