【问题标题】:How to create a function to add new record into a table? ORACLE如何创建将新记录添加到表中的函数?甲骨文
【发布时间】:2020-11-20 05:09:06
【问题描述】:

我不确定使用创建或替换功能是否是正确的方法,但我试图弄清楚如何仅在员工 ID 计数时才将记录添加到表中,其中读取日期的月份 = 月份sysdate 不超过 10。

我有一个employee_read 表,它使用主键、reading_ID、外键emp_id 和read_date 属性。

我在网上找到的信息显示返回值。但是我如何添加到表中而不是返回?可以吗?

感谢您的帮助!

创建或替换函数 AddNewReadRecord

(varEmpID IN NUMBER. varReadDate IN DATE, varWaterMeterID IN CHAR, varCuReading IN NUMBER, varPrevReading IN Number)

返回

开始

结束

【问题讨论】:

  • 可行 - 是的,正如 Tejash 所说。你应该这样做吗?不;您应该改用 procedure
  • 是的,我将使用过程而不是函数。 Tejash 解决方案有效,因为它回答了我的问题,所以它会被标记为解决方案。

标签: sql oracle plsql


【解决方案1】:

您显然可以在函数中添加 DML,但使用 PRAGMA AUTONOMOUS_TRANSACTION 如下:

CREATE OR REPLACE FUNCTION AddNewReadRecord
(varEmpID IN NUMBER. varReadDate IN DATE, varWaterMeterID IN CHAR, varCuReading IN NUMBER, varPrevReading IN Number)
RETURN number IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
Insert into your_table (...) -- column list
Select ... -- variable list
From your_table 
Where emp_id = varEmpID
And read_date = varReadDate
Group by emp_id
Having count(1) < 10;
Commit;
Return 1; -- add logic for return using exception
END;
/

【讨论】:

  • 很好,我还没有阅读编译指示。我应该去研究一下。非常感谢!
  • 如果它解决了您的问题,您可以接受答案,以便将问题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多