当NO_DATA_FOUND那么SQL

时间:2013-11-05 18:39:55

标签: sql oracle plsql

我希望当碰巧使用declare请求新的变量时,但是当我运行它时,我会在开始时询问所有内容:

Set serveroutput on;

DECLARE 
      v_aid ALUNO.AID%TYPE := &vs_aid;
      v_aluno ALUNO%ROWTYPE;
 BEGIN 

     SELECT *
     INTO v_aluno
     FROM ALUNO
     WHERE aid = v_aid;
    DBMS_OUTPUT.PUT_LINE ('-------------------------'); 
     DBMS_OUTPUT.PUT_LINE ('Já existe um ID com os seguintes dados:'); 
     DBMS_OUTPUT.PUT_LINE ('Nome: '||v_aluno.nome||' | Data Nascimento: '|| v_aluno.data_nascimento); 
     DBMS_OUTPUT.PUT_LINE ('-------------------------'); 
      EXCEPTION 
      WHEN NO_DATA_FOUND THEN 
        DECLARE 
        aid int := v_aid;
        nome varchar(30) := '&sv_nome';
        data_nascimento date := '&sv_data';

      INSERT INTO Aluno 
           (     aid 
                , nome 
                , data_nascimento 
                ) 
      VALUES  
           ( aid 
                , nome 
                , data_nascimento 
                ) ;



 END;

很抱歉,如果我的代码编写得不好,我不是SQL专家,只是想解决问题。

编辑:我正在使用oracle PL / SQL

1 个答案:

答案 0 :(得分:3)

改为使用存储过程:

CREATE OR REPLACE PROCEDURE ADD_STUDENT(I_STUDENTID IN NUMBER, I_STUDENTNAME AS VARCHAR2, I_BIRTHDATE AS DATE) IS
    v_aluno ALUNO%ROWTYPE;
BEGIN 

    SELECT * INTO v_aluno FROM ALUNO WHERE aid = I_STUDENTID;
    DBMS_OUTPUT.PUT_LINE ('-------------------------'); 
    DBMS_OUTPUT.PUT_LINE ('Já existe um ID com os seguintes dados:'); 
    DBMS_OUTPUT.PUT_LINE ('Nome: '||v_aluno.nome||' | Data Nascimento: '|| v_aluno.data_nascimento); 
    DBMS_OUTPUT.PUT_LINE ('-------------------------'); 

EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
        INSERT INTO Aluno 
           (     aid 
                , nome 
                , data_nascimento 
                ) 
        VALUES  
           ( I_STUDENTID 
                , I_STUDENTNAME 
                , I_BIRTHDATE 
                ) ;
    WHEN OTHERS THEN RAISE;
END ADD_STUDENT;

并以这种方式称呼它:

DECLARE
    sName       Aluno.nome%TYPE;
    iId         Aluno.aid%TYPE;
    dtBirthDate Aluno.data_nascimento%TYPE;
BEGIN
    ADD_STUDENT(iId, sName, dtBirthDate);
END;