許多RDBMS支持“例程”的概念,通常將其稱為過程和/或函數。 這些概念已經在編程語言中存在了一段時間了,而且不在數據庫中。 區分程序和功能的著名語言是:
- 艾達
- 基本知識
- 帕斯卡
- 等等…
(存儲的)過程和(存儲的)函數之間的一般區別可以總結如下:
程序:
- 使用JDBC CallableStatement調用
- 沒有返回值
- 通常支持OUT參數
功能:
- 可以在SQL語句中使用
- 有回報價值
- 通常不支持OUT參數
但是這些規則也有例外:
- 調用函數時,DB2,H2和HSQLDB不允許使用JDBC轉義語法。 必須在SELECT語句中使用函數
- H2只知道功能(沒有OUT參數)
- Oracle函數可能具有OUT參數
- Oracle知道出于事務原因不能在SQL語句中使用的函數
- Postgres只知道功能(所有功能組合在一起)。 OUT參數也可以解釋為返回值,根據您的喜好,它非常優雅/古怪
- 在函數上使用JDBC轉義語法時,Sybase jconn3 JDBC驅動程序無法正確處理空值
通常,可以說,例程(過程/函數)的領域遠非現代RDBMS中的標準化。 每個數據庫都有其自己的方式,而JDBC僅對各種各樣的過程/函數實現提供很少的抽象,尤其是在涉及高級數據類型(例如游標/ UDT /數組)時。
參考: 畢竟是什么程序和功能? 從我們的JCG合作伙伴 Lukas Eder的“ Java,SQL和jOOQ”博客中獲得 。
相關文章 :
- Java中的數據庫架構導航
- 將APPLY添加到您的TSQL工具帶
- Java Persistence API:快速入門
- Hibernate映射集合性能問題
- ORM問題
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/10/what-are-procedures-and-functions-after.html