1. 程式人生 > >PREPARE 預處理語句(轉載)

PREPARE 預處理語句(轉載)

文章來自mysql參考手冊

MySQL 5.1對伺服器一方的預製語句提供支援。如果您使用合適的客戶端程式設計介面,則這種支援可以發揮在MySQL 4.1中實施的高效客戶端/伺服器二進位制協議的優勢。候選介面包括MySQL C API客戶端庫(用於C程式)、MySQL Connector/J(用於Java程式)和MySQL Connector/NET。例如,C API可以提供一套能組成預製語句API的函式呼叫。請參見25.2.4節,“C API預處理語句”。其它語言介面可以對使用了二進位制協議(通過在C客戶端庫中連結)的預製語句提供支援。有一個例子是PHP 5.0中的mysqli擴充套件

對預製語句,還有一個SQL介面可以利用。與在整個預製語句API中使用二進位制協議相比,本介面效率沒有那麼高,但是它不要求程式設計,因為在SQL層級,可以直接利用本介面:

· 當您無法利用程式設計介面時,您可以使用本介面。

· 有些程式允許您傳送SQL語句到將被執行的伺服器中,比如mysql客戶端程式。您可以從這些程式中使用本介面。

· 即使客戶端正在使用舊版本的客戶端庫,您也可以使用本介面。唯一的要求是,您能夠連線到一個支援預製語句SQL語法的伺服器上。

預製語句的SQL語法在以下情況下使用:

· 在編程式碼前,您想要測試預製語句在您的應用程式中執行得如何。或者也許一個應用程式在執行預製語句時有問題,您想要確定問題是什麼。

· 您想要建立一個測試案例,該案例描述了您使用預製語句時出現的問題,以便您編制程式錯誤報告。

· 您需要使用預製語句,但是您無法使用支援預製語句的程式設計API。

預製語句的SQL語法基於三個SQL語句:

PREPARE stmt_name FROM preparable_stmt;
EXECUTE stmt_name [USING @var_name [, @var_name] ...];
{DEALLOCATE | DROP} PREPARE stmt_name;

PREPARE語句用於預備一個語句,並賦予它名稱stmt_name,藉此在以後引用該語句。語句名稱對案例不敏感。preparable_stmt可以是一個文字字串,也可以是一個包含了語句文字的使用者變數。該文字必須展現一個單一的SQL語句,而不是多個語句。使用本語句,‘?’字元可以被用於製作引數,以指示當您執行查詢時,資料值在哪裡與查詢結合在一起。‘?’字元不應加引號,即使您想要把它們與字串值結合在一起,也不要加引號。引數製作符只能被用於資料值應該出現的地方,不用於SQL關鍵詞和識別符號等。

如果帶有此名稱的預製語句已經存在,則在新的語言被預備以前,它會被隱含地解除分配。這意味著,如果新語句包含一個錯誤並且不能被預備,則會返回一個錯誤,並且不存在帶有給定名稱語句。

預製語句的範圍是客戶端會話。在此會話內,語句被建立。其它客戶端看不到它。

在預備了一個語句後,您可使用一個EXECUTE語句(該語句引用了預製語句名稱)來執行它。如果預製語句包含任何引數製造符,則您必須提供一個列舉了使用者變數(其中包含要與引數結合的值)的USING子句。引數值只能有使用者變數提供,USING子句必須準確地指明使用者變數。使用者變數的數目與語句中的引數製造符的數量一樣多。

您可以多次執行一個給定的預製語句,在每次執行前,把不同的變數傳遞給它,或把變數設定為不同的值。

要對一個預製語句解除分配,需使用DEALLOCATE PREPARE語句。嘗試在解除分配後執行一個預製語句會導致錯誤。

如果您終止了一個客戶端會話,同時沒有對以前已預製的語句解除分配,則伺服器會自動解除分配。

以下SQL語句可以被用在預製語句中:CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE和多數的SHOW語句。目前不支援其它語句。

以下例子顯示了預備一個語句的兩種方法。該語句用於在給定了兩個邊的長度時,計算三角形的斜邊。

第一個例子顯示如何通過使用文字字串來建立一個預製語句,以提供語句的文字:

mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 3;
mysql> SET @b = 4;
mysql> EXECUTE stmt1 USING @a, @b;
+------------+
| hypotenuse |
+------------+
|          5 |
+------------+
mysql> DEALLOCATE PREPARE stmt1;

第二個例子是相似的,不同的是提供了語句的文字,作為一個使用者變數:

mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> PREPARE stmt2 FROM @s;
mysql> SET @a = 6;
mysql> SET @b = 8;
mysql> EXECUTE stmt2 USING @a, @b;
+------------+
| hypotenuse |
+------------+
|         10 |
+------------+
mysql> DEALLOCATE PREPARE stmt2;

對於已預備的語句,您可以使用位置保持符。以下語句將從tb1表中返回一行:

mysql> SET @a=1;

mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?";

mysql> EXECUTE STMT USING @a;

以下語句將從tb1表中返回第二到第六行:

mysql> SET @skip=1; SET @numrows=5;

mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";

mysql> EXECUTE STMT USING @skip, @numrows;

預製語句的SQL語法不能被用於帶巢狀的風格中。也就是說,被傳遞給PREPARE的語句本身不能是一個PREPARE, EXECUTE或DEALLOCATE PREPARE語句。

預製語句的SQL語法與使用預製語句API呼叫不同。例如,您不能使用mysql_stmt_prepare() C API函式來預備一個PREPARE, EXECUTE或DEALLOCATE PREPARE語句。

預製語句的SQL語法可以在已儲存的過程中使用,但是不能在已儲存的函式或觸發程式中使用。

相關推薦

PREPARE 處理語句轉載

文章來自mysql參考手冊 MySQL 5.1對伺服器一方的預製語句提供支援。如果您使用合適的客戶端程式設計介面,則這種支援可以發揮在MySQL 4.1中實施的高效客戶端/伺服器二進位制協議的優勢。候選介面包括MySQL C API客戶端庫(用於C程式)、MySQL Connector/J(用於Java程式

MySQL 遊標PREPARE處理語句

概述 本章節介紹使用遊標來批量進行表操作,包括批量新增索引、批量新增欄位等。如果對儲存過程、變數定義、預處理還不是很熟悉先閱讀我前面寫過的關於這三個概念的文章,只有先了解了這三個概念才能更好的理解這篇文章。 正文 游標宣告 宣告游標 DECLARE cur

PL/SQL批處理語句BULK COLLECT

數據 使用 for循環 差異 code 基於 name 從表 允許 我們知道PL/SQL程序中運行SQL語句是存在開銷的,因為SQL語句是要提交給SQL引擎處理,這種在PL/SQL引擎和SQL引擎之間的控制轉移叫做上下文卻換,每次卻換時,都有額外的開銷。然而,FORALL和

特徵工程處理大全更新

快速檢視整體資訊1. .info()是DataFrame才可用的API,快捷檢視多種資訊:總行數和列數、每列元素型別和non-NaN的個數,總記憶體。DataFrame.info(verbose=None, memory_usage=True, null_counts=True)verbose:True or

在seq2seq中玩文章摘要處理資料NLP

資料預處理:import pandas as pd import numpy as np import tensorflow as tf import re from nltk.corpus import stopwords import time from tensorfl

mysql prepare 處理語句

文章來自mysql參考手冊 MySQL 5.1對伺服器一方的預製語句提供支援。如果您使用合適的客戶端程式設計介面,則這種支援可以發揮在MySQL 4.1中實施的高效客戶端/伺服器二進位制協議的優勢。候選介面包括MySQL C API客戶端庫(用於C程式)、MySQL Connector/J(用於Java程式

Oracle 中MERGE語句的用法轉載

同時 sdn ble reat nth merge type href detail 原文章出處(http://blog.csdn.net/lichkui/article/details/4306299) MERGE語句是Oracle9i新增的語法,用來合並UPDATE和I

JMeter3.0圖形化HTML報告中文亂碼問題處理轉載

ada zip 分析 需要 ted 原因 charsets 直接下載 行處理 由於個人在JMeter 3.0的實際應用中,腳本中的Test Plan/Sampler等元件命名都沒有使用中文,所以在之前介紹Dashboard Report特性的博客(原文戳這裏))成文時,沒有

轉載matlab常用字符串處理函數

class 字符串排序 否則 比較 sds 處理 find let 獲取字符串 來源:Matlab中文論壇 % 字符串處理 a=‘ a‘;b=‘b b‘;c=‘cccc‘;m=‘‘ % 獲取字符串長度 length(a) % 連接兩個字符串,每個字符串最右邊的空

轉載處理SQL解析失敗導致share pool 的爭用

共享 分享圖片 分析 轉載 地址 平時 sof icm 出現問題 通過關聯x$kglcursorx$kglcursor_child_sqlid視圖; 通過使用Oracle10035Event事件可以找到解析失敗的SQL; 通過oraclesystemdump也可以找到解析失

Codeforces 946D Timetable處理+分組背包

鏈接 pre AI 分組背包 std inf time pro can 題目鏈接:http://codeforces.com/problemset/problem/946/D 題目大意:有n個字符串,代表n天的課表,1表示這個時間要上課,0表示不要上課,一天在學校時間為第

HDOJ--3681--Prison BreakBFS處理+狀態壓縮DP

-s cin pos hdoj con 多少 電源 too 最大的 題意 F--起點 S--空格 G--能量池,只能充一次電,充完之後G變為S,也可已選擇不充而當成普通的S D--激光區,不能走 Y--電源開關 M被關在一所監獄之中,F為起點,每走一步(上下左右)消耗1節能

switch語句(轉載)

goto語句 ret 開始 單獨 類型 -c C# 成了 clas switch語句是C#中常用的跳轉語句,可以根據一個參數的不同取值執行不同的代碼。switch語句可以具備多個分支,也就是說,根據參數的N種取值,可以跳轉到N個代碼段去運行。這不同於if語句,一條單獨的if

當case when then else end 語句遇上sum或count等統計函式轉載

轉載:https://blog.csdn.net/qq_18875541/article/details/69392355  事情是因為這樣了——我需要按2個維度來分組,求出按這2個維度分組的總數情況(count),但同時也需要在這2個維度下求出按不同條件得出的總數,這些不同條件下分別

java數字影象處理基礎使用imageio寫影象檔案示例轉載

一個BufferedImage的畫素資料儲存在Raster中,ColorModel裡面儲存顏色空間,型別等資訊,當前Java只支援一下三種影象格式- JPG,PNG,GIF,如何向讓Java支援其它格式,首先要 完成Java中的影象讀寫介面,然後打成jar,加上啟動引數- Xbootclasspat

mongodb中文文字資料新聞評論處理程式碼python+java

中文文字資料預處理 Mongodb資料匯出到txt文件 將檔案按行寫入陣列 文字批量修改(加字尾等) Mongodb資料匯出到txt文件 #python # coding=utf-8 from pymongo

Oracle系統表整理+常用SQL語句收集轉載

原文:https://www.cnblogs.com/jiangxinnju/p/5840420.html-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX開頭的絕大部分都是檢視 -- DBA_TABLES意為DBA擁有的或可以訪問的所有的關係表。 -- ALL_TABLES意

【影象處理】工業相機原理詳述 轉載

轉自:  https://blog.csdn.net/HelloZEX/article/details/80905095 工業相機是機器視覺系統中的一個關鍵元件,其最本質的功能就是將光訊號轉變成有序的電訊號。選擇合適的相機也是機器視覺系統設計中的重要環節,相機的選擇不僅直接決定所採集到的影象

mysql sql語句大全轉載

原文地址:https://www.cnblogs.com/bchjazh/p/5997728.html 1、說明:建立資料庫 CREATE DATABASE database-name 2、說明:刪除資料庫 drop database dbname 3、說明:備份sql server --- 建立

layui-圖片上傳,可使用選擇圖片->上傳圖片,覽圖片,刪除圖片轉載

原文地址:https://gitee.com/AMortal/codes/qt8m6zk30u1g4evr95jhx13 <!DOCTYPE html> <html> <head> <meta