作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了以下存储过程
SET TERM ^ ;
CREATE OR ALTER PROCEDURE EDIT_FATURA (fat_id integer, mflag integer) as
begin
update inv_lines set mflag = :mflag where fat_id = :fat_id;
delete from inv_lines_temp where 1=1 ;
insert into inv_lines_temp select ID,CODE_ID,ADET,UNIT_PRICE,LINE_NET,LINE_VAT,KDV,LINE_GRAND,CRN
from inv_lines where fat_id = :fat_id;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON INV_LINES TO PROCEDURE EDIT_FATURA;
GRANT SELECT,INSERT,DELETE ON INV_LINES_TEMP TO PROCEDURE EDIT_FATURA;
GRANT EXECUTE ON PROCEDURE EDIT_FATURA TO SYSDBA;
通过以下代码,我使用 Delphi 应用程序调用存储过程
dm.q_genel.Close;
dm.q_genel.SQL.Clear;
dm.q_genel.SQL.Add('EXECUTE PROCEDURE EDIT_FATURA(:p1,:p2)');
dm.q_genel.ParamByName('p1').AsInteger := fid;
dm.q_genel.ParamByName('p1').AsInteger := sayi;
dm.q_genel.execute;
正如所见,一些记录通过我的delphi应用程序中调用的存储过程插入到表中。
但是由于它们在执行存储过程后未提交,因此我无法访问应用程序中新插入的记录。
我如何提交由存储过程插入的行,以便我可以在我的应用程序中访问它们?
据我所知,它不允许在存储过程中“提交”
最佳答案
您必须启动事务,运行存储过程,然后在出现任何错误时提交或回滚。这是在应用程序中完成的,因此您的代码将如下所示:
begin
dm.q_genel.Close;
dm.q_genel.SQL.Clear;
dm.q_genel.SQL.Add('EXECUTE PROCEDURE EDIT_FATURA(:p1,:p2)');
dm.q_genel.ParamByName('p1').AsInteger := fid;
dm.q_genel.ParamByName('p1').AsInteger := sayi;
try
dm.<Database>.StartTransaction;
dm.q_genel.execute;
dm.<Database>.Commit;
except
dm.<Database>.Rollback;
raise;
end;
end;
或者,如果您想在提交之前读取记录,以便在某些情况下可以回滚,您可以更改数据库中的隔离级别,以便可以读取记录,当然,只能< strong>您或您的应用程序可以读取它,在您提交之前没有其他人可以读取它。
关于delphi - 提交由 Firebird 中的存储过程插入的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4837251/
我是一名优秀的程序员,十分优秀!