编写一个不带参数 Ins_Job 的 PL/SQL 过程,在表 JOBS 中插入新记录

Posted

技术标签:

【中文标题】编写一个不带参数 Ins_Job 的 PL/SQL 过程,在表 JOBS 中插入新记录【英文标题】:Write a PL/SQL procedure with no parameters Ins_Job that inserts new record in table JOBS 【发布时间】:2020-11-30 06:31:22 【问题描述】:
CREATE OR REPLACE PROCEDURE Insert_Job AS
    v_job_id VARCHAR2(10) := 'HR_Assistant';
    v_job_title VARCHAR2(35) := 'HRessourcesAssistant';
    v_Min_Salary NUMBER(22):= 400;
    v_max_salary NUMBER (22):= 5000;
  
BEGIN
    INSERT INTO OEHR_JOBS (JOB_ID, JOB_TITLE,MIN_SALARY,MAX_SALARY)
    VALUES (v_job_id, v_job_title, v_Min_Salary, v_max_salary);
    dbms_output.put_line('Insertion OK');
End;

编写一个不带参数 Insert_Job 的 PL/SQL 过程,该过程在表 JOBS 中插入一条新记录: - 工作 ID:助理 - 职位名称:HRessources 助理 - 最低工资:400 - 最高工资:5000 该过程应打印一条消息通知用户插入状态(成功/错误)。在这两种情况下调用该过程并截取输出的屏幕截图。

这是我尝试的,但它没有任何帮助吗?它创建了过程但没有数据进入表,当我调用它时它也会显示错误。我在使用 APEX ORACLE,下面是错误消息

ORA-06550:第 2 行,第 1 列: PLS-00905:对象 WKSP_ELIASHOME.INSERT_JOB 无效 ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200200”,第 626 行 ORA-06550:第 2 行,第 1 列: PL/SQL:语句被忽略 ORA-06512:在“SYS.DBMS_SYS_SQL”,第 1658 行 ORA-06512:在“SYS.WWV_DBMS_SQL_APEX_200200”,第 612 行 ORA-06512:在“APEX_200200.WWV_FLOW_DYNAMIC_EXEC”,第 1749 行

【问题讨论】:

什么不起作用? 您是否启用了输出?如果没有,请在调用该过程之前运行set serveroutput on。再想一想,你有没有调用这个过程?您发布的代码只是创建它;你应该执行它,对吧? begin insert_job; end; ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小 ORA-06512:在“WKSP_ELIASHOME.INSERT_JOB1”,第 2 行 ORA-06512:在第 1 行 ORA-06512:在“SYS.DBMS_SQL”,第 1721 行 1. 开始 insert_job1;结尾;它向我显示了这个错误。 Dale k,它创建了程序但表中没有数据。而且当我调用它时,它向我显示了一个错误 .ORA-06502: PL/SQL: numeric or value error: string buffer too small ORA-06512: at "WKSP_ELIASHOME.INSERT_JOB1", line 2 ORA-06512: at line 1 ORA-06512:在“SYS.DBMS_SQL”, 【参考方案1】:

当我读到你的错误信息时:numeric or value error: character string buffer too small 这意味着你的长度太小了。 在您的代码中:

 v_job_id VARCHAR2(10) := 'HR_Assistant';

这是因为长度 'HR_Assistant' 长于 10

尝试将长度v_job_id改为:

v_job_id VARCHAR2(12) := 'HR_Assistant';

或者你可以删除一些字符,放入:

v_job_id VARCHAR2(10) := 'Assistant';

或者,也许您必须检查表 OEHR_JOBS 中列 JOB_ID 的第一个长度

对不起,如果我的英语不好而且我不太熟悉 PLSQL。

【讨论】:

以上是关于编写一个不带参数 Ins_Job 的 PL/SQL 过程,在表 JOBS 中插入新记录的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 05 存储过程 procedure

PL/SQL程序设计—— 存储函数&存储过程

oracle PL/SQL编程语言之游标的使用

oracle PL/SQL编程语言之游标的使用

Oracle PL/SQL:如何根据同一记录的 ID 字段返回字符串值?

使用带有布尔输入参数的 PL/SQL 在 oracle 中调用 java 存储过程