Créer une Procédure Stockée Oracle 11g, pl/sql à l'aide de SI et
J'ai eu un problème de la création de cette procédure stockée et a eu quelques erreurs lors de l'exécution. Les erreurs se composait d'instruction SQL ignoré et commande SQL n'est pas correctement terminé. Je pensais que tout le code est assez propre.
-
Retourne le nombre total d'enregistrements et l'insère dans le RECORD_COUNT variable de table TABLE1.
-
Condition pour voir si RECORD_COUNT est supérieure à zéro et les décharges de données pour effacer la table TABLE1.
-
Condition pour voir si RECORD_COUNT est égal à zéro afin de les insérer dans la table TABLE1 de la EXTERNAL_TABLE table.
S'il vous plaît aider.
CREATE OR REPLACE PROCEDURE sp_INSERT
(RECORD_COUNT OUT NUMBER)
IS
BEGIN
SELECT COUNT(*)
INTO RECORD_COUNT
FROM TABLE1;
IF RECORD_COUNT > 0 THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE TABLE1'
END IF;
IF RECORD_COUNT = 0 THEN
INSERT INTO TABLE1
(
JOB_ID,
NUM_SP1,
NUM_SP2,
NUM_SP3,
NUM_SP4,
)
(SELECT JOB_ID,
NUM_SP1,
NUM_SP2,
NUM_SP3,
NUM_SP4,
FROM EXTERNAL_TABLE)
COMMIT;
END IF;
END;
- Bonjour, les messages d'erreur aident - ils vous donner les numéros de ligne. Vous êtes en manque d'un certain nombre de points-virgules et de TRONQUER est DDL et ne peut donc pas être préformé, PL/SQL à l'extérieur du SQL dynamique.
Vous devez vous connecter pour publier un commentaire.
Première: Vous avez besoin de
;
à la fin de toute instrauction dans votre procédure.Deuxième:
TRUNCATE
est un DDL de commande, les commandes DDL ne sont pas valides dans plsql, vous pouvez utiliserDELETE
commande instaed ou de l'utilisation EXÉCUTER Déclaration IMMÉDIATE:Troisième: Pour
insert-select statement
voir ici et ici.Il vous manque un point-virgule après votre
SELECT
déclaration. Vous auriez besoin de quelque chose commeVous aussi vous ne pouvez pas mettre en DDL (comme
TRUNCATE
) en PL/SQL en SQL statique. Vous devez utiliser SQL dynamique. Vous aurez également besoin d'un point-virgule à la fin de cette déclaration.L'affichage de l'erreur exacte de la pile (y compris les numéros de ligne) est toujours utile-les compilateurs sont généralement beaucoup mieux à détecter les erreurs de syntaxe que les humains de la lecture des messages du forum.
Les deux réponses va dans la bonne direction.
Voici une autre alternative, à voir si le volume dans le tableau ne fait pas de problème pour la commande de SUPPRESSION:
Et exemple de sortie:
CREATE OR REPLACE PROCEDURE EMP_INSERT
(RECORD_COUNT NUMÉRO)
EST
COMMENCER