DBMS_SQL字符约束

时间:2016-12-01 21:14:26

标签: oracle-sqldeveloper dynamic-sql sql-pl

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

0 个答案:

没有答案