Maison base de données tutoriel mysql SQL和PL/SQL中绑定变量的区别

SQL和PL/SQL中绑定变量的区别

Jun 07, 2016 pm 05:24 PM
pl/sql sql语句

在Oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一个硬解析需要经解析,制定执行路

在Oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.

一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行), 而且引起的问题不能通过增加内存条和cpu的数量来解决。之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。

而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。

1、sql中绑定变量

普通sql语句:

SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;

含绑定变量的sql 语句:

SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;

Sql*plus 中使用绑定变量:

sql> variable x number;

sql> exec :x := 123;

sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;

 

2、pl/sql

pl/sql很多时候都会自动绑定变量而无需编程人员操心,引用变量即是引用绑定变量,即很多你写得sql语句都会自动利用绑定变

量,如下例所示:

create or replace procedure dsal(p_empno in number)
as
begin
update emp
set sal=sal*2
where empno = p_empno;
commit;
end;
/

也许此时你会想要利用绑定变量来替代p_empno,但是这是完全没有必要的,因为在pl/sql中,引用变量即是引用绑定变量。

但当引用的值不是变量(常量或者表达式)且要多次重复执行时,也需要动态绑定变量:

DECLARE

c_temp site%ROWTYPE;
TYPE cursortype IS REF CURSOR;
cur_temp cursortype;
BEGIN
OPEN cur_temp FOR('select * from site where site_id=:1')
USING 91;
LOOP
FETCH cur_temp
INTO c_temp;
EXIT WHEN cur_temp%NOTFOUND;
EXECUTE IMMEDIATE 'insert into b values (:1)'
USING c_temp.site_id;
END LOOP;
CLOSE cur_temp;
COMMIT;
END;

linux

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser expliquer dans Oracle Comment utiliser expliquer dans Oracle May 03, 2024 am 12:06 AM

La commande EXPLAIN dans Oracle est utilisée pour analyser le plan d'exécution d'une instruction SQL. La méthode d'utilisation consiste à ajouter le mot-clé EXPLAIN avant l'instruction SQL. Les résultats EXPLAIN contiennent des informations telles que l'ID, le type d'opérateur, l'estimation du nombre de lignes, l'estimation du coût, l'estimation du nombre de lignes en sortie, les prédicats d'accès et les prédicats de filtre, qui peuvent être utilisés pour optimiser les performances des requêtes, identifier les opérateurs coûteux et les tables pouvant bénéficier d'une optimisation. techniques.

Que représente un caractère en SQL ? Que représente un caractère en SQL ? May 02, 2024 am 03:51 AM

Les caractères en SQL sont placés entre guillemets simples, tels que « A ». Les chaînes sont placées entre guillemets doubles et les caractères et les chaînes sont de types différents. Les caractères entourés de guillemets simples sont stockés inchangés et les chaînes entourées de guillemets doubles peuvent contenir des séquences d'échappement. Le guillemet simple lui-même peut être stocké avec une séquence d'échappement, telle que '\'''.

Comment interroger la somme de deux colonnes de données en même temps dans ThinkPhp6? Comment interroger la somme de deux colonnes de données en même temps dans ThinkPhp6? Apr 01, 2025 pm 02:54 PM

ThinkPhp6 Database Query: Comment utiliser TP6 pour implémenter les instructions SQL SelectSum (Jin), SUM (CHU) NOSYSDBUIL dans le framework ThinkPhp6, comment utiliser la déclaration SQL Select ...

Oracle PL / SQL Deep Dive: Mastering Procédures, fonctions et packages Oracle PL / SQL Deep Dive: Mastering Procédures, fonctions et packages Apr 03, 2025 am 12:03 AM

Les procédures, fonctions et packages dans OraclePL / SQL sont utilisés pour effectuer des opérations, renvoyer des valeurs et organiser le code, respectivement. 1. Le processus est utilisé pour effectuer des opérations telles que la sortie des salutations. 2. La fonction est utilisée pour calculer et renvoyer une valeur, comme le calcul de la somme de deux nombres. 3. Les packages sont utilisés pour organiser des éléments pertinents et améliorer la modularité et la maintenabilité du code, telles que les packages qui gèrent l'inventaire.

Comment trier la liste des produits en faisant glisser et s'assurer que la propagation est efficace? Comment trier la liste des produits en faisant glisser et s'assurer que la propagation est efficace? Apr 02, 2025 pm 01:00 PM

Comment implémenter le tri de la liste de produits en faisant glisser. Lorsque vous traitez avec le tri de la liste des produits frontaux, nous sommes confrontés à un besoin intéressant: les utilisateurs le font en faisant glisser des produits ...

Comment trier la liste des produits et prendre en charge les opérations de diffusion en traînant? Comment trier la liste des produits et prendre en charge les opérations de diffusion en traînant? Apr 02, 2025 pm 01:12 PM

Comment trier la liste des produits en faisant glisser? Lorsque vous traitez avec des plateformes de commerce électronique ou des applications similaires, vous rencontrez souvent la nécessité de trier la liste de produits ...

Les fonctions Golang optimisent les opérations de base de données d'applications Web Les fonctions Golang optimisent les opérations de base de données d'applications Web May 02, 2024 am 08:00 AM

Optimisez les opérations de base de données des applications Web : Regroupement de connexions : réutilisez les connexions de base de données et réduisez les frais liés à la création et à la destruction de connexions. Requêtes précompilées : évitez de recompiler les instructions SQL à chaque fois que vous effectuez une requête, ce qui améliore l'efficacité des requêtes. Transaction : garantissez les propriétés ACID des opérations de base de données pour obtenir l'atomicité, la cohérence, l'isolement et la durabilité.

See all articles