次のエラーが発生しました。DBMS_SQL について学習しています。テーブルを削除して新しいテーブルを再作成する以下のコードをいじっていました。新しいテーブルの再作成で気付きましたが、文字の制約が発生しています。これを修正するための最善の解決策は何だろうと思っています。
2 つの文字列を連結しようとしましたが、うまくいきませんでした。'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" *原因: 算術、数値、文字列、変換または制約エラーが発生しました。たとえば、このエラーは、NOT NULL と宣言された変数に値 NULL を代入しようとした場合、または NUMBER(2) と宣言された変数に 99 より大きい整数を代入しようとした場合に発生します。*処置: 値が制約に違反しないように、データ、操作方法または宣言方法を変更してください。
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');