当找不到数据时,SQL

当找不到数据时,SQL,sql,oracle,plsql,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.P

我希望在发生这种情况时使用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

使用存储过程:

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;

请改用存储过程:

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;

请改用存储过程:

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;

请改用存储过程:

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;


您能否编辑并澄清您正在使用的SQL Server?语法可能有点不同。完成。它的oraclepl/SQLyou不能这样做。在所有操作之前都会询问用户输入变量,并使用它预编译脚本。你应该改为创建一个存储过程,接受学生的名字作为输入。有什么方法可以实现我想要的吗?我找到了一个解决方法。谢谢大家D您是否可以编辑并澄清您正在使用的SQL Server?语法可能有点不同。完成。它的oraclepl/SQLyou不能这样做。在所有操作之前都会询问用户输入变量,并使用它预编译脚本。你应该改为创建一个存储过程,接受学生的名字作为输入。有什么方法可以实现我想要的吗?我找到了一个解决方法。谢谢大家D您是否可以编辑并澄清您正在使用的SQL Server?语法可能有点不同。完成。它的oraclepl/SQLyou不能这样做。在所有操作之前都会询问用户输入变量,并使用它预编译脚本。你应该改为创建一个存储过程,接受学生的名字作为输入。有什么方法可以实现我想要的吗?我找到了一个解决方法。谢谢大家D您是否可以编辑并澄清您正在使用的SQL Server?语法可能有点不同。完成。它的oraclepl/SQLyou不能这样做。在所有操作之前都会询问用户输入变量,并使用它预编译脚本。你应该改为创建一个存储过程,接受学生的名字作为输入。有什么方法可以实现我想要的吗?我找到了一个解决方法。谢谢大家D