当前位置:网站首页>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;

原网站

版权声明
本文为[C'est du gâteau de riz.]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060912378065.html