当前位置:网站首页>Base de données Advanced Learning Notes - - SQL statements
Base de données Advanced Learning Notes - - SQL statements
2022-07-06 11:09:00 【C'est du gâteau de riz.】
sqlClassification de
1.Statiquesql:select * from emp where empno=7788;
--StatiquesqlSe réfère àPL/SQLUtilisé dans le blocsqLLes déclarations sont claires au moment de la compilation,Ce qui est fait est de déterminer l'objet
2.Dynamiquesql:select * from emp where empno='Paramètres';
--DynamiquesqlC'est - à - direPL/SQLTemps de compilation des blocssqlLes déclarations sont incertaines,Si différentes opérations sont effectuées en fonction des paramètres entrés par l'utilisateur
(Le paramètre peut êtresqlDéclarations,Nombre,Texte)
------Dynamiquesql-----
Dynamiquesql:C'est ça.sqlÉcrit dans une chaîne,Résoudre l'exécution de la chaîne dans la procédure stockéesql.
--(1)Dynamique de mise en œuvresqlPlusieurs façons de
(1)&Entrée des paramètres
(2)Utiliseropen-for,fetchEtcloseDéclarations(Curseur)
Pour le traitement d'une requête multiligne dynamique,Peut être utiliséoPEN-FORInstruction ouvrir le curseur,
UtiliserFETCHInstruction extraction circulaire des données,Utilisation finaleCLOSEInstruction fermer le curseur.
(3)Utiliser des déclarations dynamiques en vrac
C'est - à - dire en mouvementsqlUtilisé dansBULKClause,Ou lors de l'utilisation d'une variable curseurfetchUtilisé dansBULK,OuFORALLUtilisé dans l'énoncé
(4)Utilisation du systèmePL/soLSacDBMs_sQLPour réaliser la dynamiquesQL
(5)UtiliserEXECUTE IMMEDIATEDéclarations
Y compris:DDLDéclarations,DCLDéclarations,DNLDéclarations et une seule lignesELECTDéclarations.Cette méthode ne peut pas être utilisée pour traiter des déclarations de requête multilignes
--DynamiquesqlLe rôle de
(1)Peut soutenirDDlDéclarations,StatiquesqlNe peut supporter queDMLDéclarations
(2)SoutienWEB Volonté d'interroger le programme de référence
(3) La logique d'entreprise peut d'abord être placée dans le tableau , Puis compilez dynamiquement
--UtiliserEXECUTE IMMEDIATE Dynamique d'exécution des déclarations sql-----------
Statiquesql Pour s'intégrer dans plsqlDans la Déclaration,Et dynamiquesql L'instruction produit différentes choses au moment de l'exécution selon les circonstances sqlDéclarations.
Syntaxe:
execute immediate Chaîne d'instruction dynamique
[into Liste des variables]
[using Liste des paramètres]
Explication:
Chaîne d'instruction dynamique : Stocker les sqlDéclarations ouplsqlVariable de chaîne pour le bloc
into: Pour stocker les résultats de la requête
using:Valeur de passage du paramètre
Dynamiquesql Format du paramètre de transfert :[:Nom du paramètre], Le paramètre doit être utilisé au moment de l'exécution usingTransmission de la valeur
--Utiliser la dynamiquesql Action créer une table -------------
—Oui.PL/sQLEn programmation,InDML Et les déclarations de contrôle des transactions peuvent être utilisées directement sql,
MaisDDL Les déclarations et les déclarations de contrôle du système ne peuvent pas être faites dans PL/sqlUtilisation directe,
Pour atteindre cet objectifpL/sqlUtilisé dansDDL Déclarations et déclarations de contrôle du système , Vous pouvez utiliser Dynamic sqlPour réaliser
--Mauvaise écriture
begin
create tables test1000 as select * from emp;
end;
--La bonne écriture1( Aucun paramètre n'est transmis et aucune valeur n'est attribuée )
begin
execute immediate 'create table test1000 as select * from emp ';
end;
select * from test1000;
--La bonne écriture2( Exécuter dynamiquement un ensemble de résultats stockés dans une variable )
declare
sqls varchar2(100);
begin
sqls:='create table test1001 as select * from emp ';
execute immediate sqls;
end;
select * from test1001;
--------Dynamiquesql Passer à l'assignation des paramètres -----------
using Passer le ginseng
into Affectation
Format des paramètres[:Paramètres]
--- Demander le salaire par numéro d'employé
---Écriture 3: Passer à l'assignation des paramètres
declare
v_sal emp.sal%type;
begin
--Dynamique de mise en œuvresql
execute immediate 'select sal from emp where empno=:Paramètres'
--Affectation des variables
into v_sal
--Paramètres de réception
using &Entrez le numéro de l'employé;
dbms_output.put_line('Salaire'||v_sal);
end;
---------Dynamiquesql L'instruction ne transmet pas de paramètres ,Assigner seulement des valeurs--------------
---Exemple: Demander le salaire par numéro d'employé
-----Rédaction IV:Pas de ginseng.,Assigner seulement des valeurs
declare
v_sal emp.sal%type;
begin
execute immediate 'select sal from emp where empno=7788'
into v_sal;
dbms_output.put_line(v_sal);
end;
------Exemple----------
--Créer une procédure stockée, En passant le nom de la table , Supprimer le tableau correspondant (Méthodes2)??????
create or replace procedure truncate_table(table_name in varchar2)
is
sqls varchar2(100);
begin
sqls:='truncate table'||table_name;
execute immediate sqls;
end;
begin
truncate_table('test1001');
end;
select * from test1001;
--Syntaxe pour créer une table----------------------------
create table Nom du tableau(
Nom du champ Type de champ)
--Créer une table: Créer une table basée sur des paramètres tels que le nom de la table et le nom du champ entrés par l'utilisateur
create or replace procedure create_table(
table_name in varchar2,----Nom du tableau
field1 in varchar2,---Champ1
field1type in varchar2,---Champ1Type de données pour
field2 in varchar2,---Champ2
field2type in varchar2,---Champ2Type de données pour
field3 in varchar2,---Champ3
field3type in varchar2---Champ3Type de données pour Le dernier argument n'est pas suivi d'une virgule
)
is
sqls varchar2(500);
begin
sqls:='create table'||' '||table_name||'('||field1||' '||field1type||','||field2||' '
||field2type||','||field3||' '||field3type||')';
execute immediate sqls;
end;
-- Appeler la procédure stockée pour créer une table ??????---Permissions insuffisantes(sysUtilisateurs)
begin
create_table('test_table','id','varchar2(100)','name','varchar2(100)','age','varchar2(100)');
end;
--Insérer des données(sysUtilisateurs)---------------------------------------
create or replace procedure insert_table(
id in varchar2,
name in varchar2,
age in varchar2
)
is
sqls varchar2(500);
begin
sqls:='insert into test_table values(:1,:2,:3)';
execute immediate sqls using id,name,age;
end;
--Appelez
begin
insert_table('1','Petit Rouge.','18');
end;
select * from test_table;
边栏推荐
- [Thesis Writing] how to write function description of jsp online examination system
- Introduction and use of automatic machine learning framework (flaml, H2O)
- Swagger、Yapi接口管理服务_SE
- neo4j安装教程
- 基于apache-jena的知识问答
- [number theory] divisor
- CSDN问答模块标题推荐任务(一) —— 基本框架的搭建
- Why can't I use the @test annotation after introducing JUnit
- Postman uses scripts to modify the values of environment variables
- Some notes of MySQL
猜你喜欢
Asp access Shaoxing tourism graduation design website
02-项目实战之后台员工信息管理
【博主推荐】C#MVC列表实现增删改查导入导出曲线功能(附源码)
CSDN blog summary (I) -- a simple first edition implementation
[ahoi2009]chess Chinese chess - combination number optimization shape pressure DP
Django运行报错:Error loading MySQLdb module解决方法
【博主推荐】asp.net WebService 后台数据API JSON(附源码)
Why can't I use the @test annotation after introducing JUnit
QT creator specifies dependencies
1. Mx6u learning notes (VII): bare metal development (4) -- master frequency and clock configuration
随机推荐
Deoldify project problem - omp:error 15:initializing libiomp5md dll,but found libiomp5md. dll already initialized.
【博主推荐】asp.net WebService 后台数据API JSON(附源码)
连接MySQL数据库出现错误:2059 - authentication plugin ‘caching_sha2_password‘的解决方法
Classes in C #
MySQL的一些随笔记录
windows下同时安装mysql5.5和mysql8.0
解决:log4j:WARN Please initialize the log4j system properly.
Copie maître - esclave MySQL, séparation lecture - écriture
[recommended by bloggers] asp Net WebService background data API JSON (with source code)
CSDN问答模块标题推荐任务(一) —— 基本框架的搭建
Breadth first search rotten orange
CSDN question and answer tag skill tree (I) -- Construction of basic framework
npm一个错误 npm ERR code ENOENT npm ERR syscall open
windows无法启动MYSQL服务(位于本地计算机)错误1067进程意外终止
软件测试-面试题分享
CSDN question and answer module Title Recommendation task (I) -- Construction of basic framework
Tcp/ip protocol (UDP)
MySQL completely uninstalled (windows, MAC, Linux)
01项目需求分析 (点餐系统)
Why can't I use the @test annotation after introducing JUnit