首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLE PL/SQL:使用多个参数调用存储过程函数(DML查询)

ORACLE PL/SQL:使用多个参数调用存储过程函数(DML查询)
EN

Stack Overflow用户
提问于 2017-03-11 01:56:05
回答 1查看 942关注 0票数 0

这里是新的PL/SQL人员。我有一个(成功编译的) PL/SQL函数块,它通过向数据库中的表添加一个新术语来操作该表:

代码语言:javascript
复制
create or replace FUNCTION add_new_term
    (TERM_ID_IN IN NUMBER, TERM_IN IN VARCHAR2, IS_METATERM_IN IN NUMBER)
    RETURN VARCHAR2
IS
    add_term CV_TERMS.TERM_NAME%TYPE; --TERM_NAME is VARCHAR2 type
BEGIN
    INSERT INTO CV_TERMS (TERM_ID, TERM_NAME, IS_METATERM)
    VALUES (TERM_ID_IN, TERM_IN, IS_METATERM_IN);
    dbms_output.put_line('New term successfully added to CV_TERMS table: ' || TERM_IN);
    RETURN add_term;
EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
        raise_application_error (-20001, 'You have tried to insert a duplicate term.');
    WHEN OTHERS THEN    
        raise_application_error (-20002, 'An error has occurred inserting a term - '|| SQLCODE ||' -ERROR- '|| SQLERRM);
END add_new_term;

我像调用存储过程一样调用此函数:

代码语言:javascript
复制
DECLARE
  add_term_success cv_terms.term_name%type;
BEGIN
  add_term_success := add_new_term(cv_terms_pk.NEXTVAL, 'TESTTT', 0);
END;

SQLDeveloper告诉我,这个过程已经成功完成了,但是,这个术语还没有添加到表中。我独立创建了序列cv_terms_pk (它不在表CV_TERMS‘SQL中)。它需要出现在那里吗?我是不是传错了?或者是我的add_term声明有什么问题?想法?

EN

Stack Overflow用户

回答已采纳

发布于 2017-03-11 22:37:42

在DML插入之后,您必须提交事务。

代码语言:javascript
复制
create or replace FUNCTION add_new_term
(TERM_ID_IN IN NUMBER, TERM_IN IN VARCHAR2, IS_METATERM_IN IN NUMBER)
RETURN VARCHAR2 IS
add_term CV_TERMS.TERM_NAME%TYPE; --TERM_NAME is VARCHAR2 type

BEGIN INSERT INTO CV_TERMS(TERM_ID, TERM_NAME, IS_METATERM VALUES (TERM_ID_IN, TERM_IN, IS_METATERM_IN); COMMIT; ---LINE ADDED ...

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42724829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档