我希望当碰巧使用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
答案 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;