我遇到了以下错误,我正在学习DBMS_SQL。 我正在玩下面的代码,它会丢弃一个表并重新创建一个新表。我注意到为了重新制作新表,我遇到了一个字符约束。只是想知道解决这个问题的最佳解决方案是什么。
我试图连接两个字符串但是没有用。 ' CREATE TABLE students_12345(s_id NUMBER,fname VARCHAR2(30),lname VARCHAR2(30),tname VARCHAR2(100),得分NUMBER,exam_result VARCHAR2(6))';
它可能非常简单,但是我花了几个小时来完成代码中的这一点,此时我的眼睛正方形。
提前致谢!
错误从第48行开始: - 命令中的错误 - EXECUTE RecreateTempTable(' a') 错误报告 - ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小 ORA-06512:在" SYS.RECREATETEMPTABLE",第33行 ORA-06512:第1行 06502. 00000 - " PL / SQL:数字或值错误%s" *原因:算术,数字,字符串,转换或约束错误 发生了。例如,如果尝试,则会发生此错误 将值NULL赋给声明为NOT NULL的变量,或者如果是 尝试将大于99的整数分配给变量 声明NUMBER(2)。 *操作:更改数据,如何操作或如何声明数据 这些值不会违反约束条件。
CREATE TABLE students_12345
(student_id NUMBER,
first_name VARCHAR2(30),
last_name VARCHAR2(30),
test_name VARCHAR2(100),
score NUMBER,
exam_result VARCHAR2(6));
/
-----------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE RecreateTempTable (
p_description IN VARCHAR2) IS
v_descrip VARCHAR2(100) := p_description;
v_cursor NUMBER;
v_createstring VARCHAR2(100);
v_dropstring VARCHAR2(100);
v_numrows INTEGER;
BEGIN
v_cursor := DBMS_SQL.OPEN_CURSOR;
v_dropstring := 'DROP TABLE students_12345';
BEGIN
-- parse the query using the parameter table name
DBMS_SQL.PARSE(v_cursor, v_dropString, DBMS_SQL.NATIVE);
-- execute the cursor query
v_numrows := DBMS_SQL.EXECUTE(v_cursor);
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
v_createstring := 'CREATE TABLE students_12345(s_id NUMBER, fname VARCHAR2(30),lname VARCHAR2(30),tname VARCHAR2(100), score NUMBER)';
DBMS_SQL.PARSE(v_cursor, v_createstring, DBMS_SQL.NATIVE);
v_numrows := DBMS_SQL.EXECUTE(v_cursor);
DBMS_SQL.CLOSE_CURSOR(v_cursor);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(v_cursor);
RAISE;
END RecreateTempTable;
/
-------------------------------------------------------------------------------
EXECUTE RecreateTempTable('a');