0

我遇到了以下错误,我正在学习 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');
4

0 回答 0