我遇到了以下错误,我正在学习 DBMS_SQL。我正在玩下面的代码,它删除一个表并重新创建一个新表。我注意到为了重新创建新表,我遇到了字符限制。只是想知道解决此问题的最佳解决方案是什么。
我试图连接两个字符串,但没有奏效。'CREATE TABLE students_12345(s_id NUMBER, fname VARCHAR2(30),lname VARCHAR2(30),tname VARCHAR2(100), score 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');