{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,2,11]],"date-time":"2026-02-11T14:50:03Z","timestamp":1770821403649,"version":"3.50.1"},"reference-count":55,"publisher":"Association for Computing Machinery (ACM)","issue":"8","content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Proc. VLDB Endow."],"published-print":{"date-parts":[[2021,4]]},"abstract":"<jats:p>Procedural extensions of SQL have been in existence for many decades now. However, little is known about their magnitude of usage and their complexity in real-world workloads. Procedural code executing in a RDBMS is known to have inefficiencies and limitations; as a result there have been several efforts to address this problem. However, the lack of understanding of their use in real workloads makes it challenging to (a) motivate new work in this area, (b) identify research challenges and opportunities, and (c) demonstrate impact of novel work. We aim to address these challenges with our work.<\/jats:p>\n          <jats:p>\n            In this paper, we present the results of our in-depth analysis of thousands of stored procedures, user-defined functions and triggers taken from several real workloads. We introduce\n            <jats:italic>SQL-ProcBench<\/jats:italic>\n            , a benchmark for procedural workloads in RDBMSs. SQL-ProcBench has been created using the insights derived from our analysis, and thus represents real workloads. Using SQL-ProcBench, we present an experimental evaluation on several database engines to understand and identify research challenges and opportunities. We emphasize the need to work on these interesting and relevant problems, and encourage researchers to contribute to this area.\n          <\/jats:p>","DOI":"10.14778\/3457390.3457402","type":"journal-article","created":{"date-parts":[[2021,10,21]],"date-time":"2021-10-21T22:48:38Z","timestamp":1634856518000},"page":"1378-1391","source":"Crossref","is-referenced-by-count":23,"title":["Procedural extensions of SQL"],"prefix":"10.14778","volume":"14","author":[{"given":"Surabhi","family":"Gupta","sequence":"first","affiliation":[{"name":"Microsoft Research India"}]},{"given":"Karthik","family":"Ramachandra","sequence":"additional","affiliation":[{"name":"Microsoft Azure Data (SQL), India"}]}],"member":"320","published-online":{"date-parts":[[2021,10,21]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"[n.d.]. Cyclomatic complexity. https:\/\/en.wikipedia.org\/wiki\/Cyclomatic_complexity.  [n.d.]. Cyclomatic complexity. https:\/\/en.wikipedia.org\/wiki\/Cyclomatic_complexity."},{"key":"e_1_2_1_2_1","unstructured":"[n.d.]. Database Triggers. https:\/\/en.wikipedia.org\/wiki\/Database_trigger.  [n.d.]. Database Triggers. https:\/\/en.wikipedia.org\/wiki\/Database_trigger."},{"key":"e_1_2_1_3_1","unstructured":"[n.d.]. Interleaved execution for MSTVFs in Microsoft SQL Server. https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/performance\/intelligent-query-processing?view=sql-server-ver15#interleaved-execution-for-mstvfs.  [n.d.]. Interleaved execution for MSTVFs in Microsoft SQL Server. https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/performance\/intelligent-query-processing?view=sql-server-ver15#interleaved-execution-for-mstvfs."},{"key":"e_1_2_1_4_1","unstructured":"[n.d.]. MemSQL SQL compiler. https:\/\/www.singlestore.com\/blog\/full-fledged-sql-compiler-faster-query-processing\/.  [n.d.]. MemSQL SQL compiler. https:\/\/www.singlestore.com\/blog\/full-fledged-sql-compiler-faster-query-processing\/."},{"key":"e_1_2_1_5_1","unstructured":"[n.d.]. Microsoft Azure SQL Database. https:\/\/azure.microsoft.com\/en-us\/services\/sql-database\/.  [n.d.]. Microsoft Azure SQL Database. https:\/\/azure.microsoft.com\/en-us\/services\/sql-database\/."},{"key":"e_1_2_1_6_1","unstructured":"[n.d.]. Performance overhead of SQL user-defined functions. http:\/\/glennpaulley.ca\/conestoga\/2015\/07\/performance-overhead-of-sql-user-defined-functions\/.  [n.d.]. Performance overhead of SQL user-defined functions. http:\/\/glennpaulley.ca\/conestoga\/2015\/07\/performance-overhead-of-sql-user-defined-functions\/."},{"key":"e_1_2_1_7_1","unstructured":"[n.d.]. PL\/pgSQL: SQL Procedural Language for PostgreSQL. http:\/\/www.postgresql.org\/docs\/8.2\/static\/plpgsql.html.  [n.d.]. PL\/pgSQL: SQL Procedural Language for PostgreSQL. http:\/\/www.postgresql.org\/docs\/8.2\/static\/plpgsql.html."},{"key":"e_1_2_1_8_1","unstructured":"[n.d.]. PL\/SQL compilation in Oracle. http:\/\/www.dba-oracle.com\/t_compiled_pl_sql.htm.  [n.d.]. PL\/SQL compilation in Oracle. http:\/\/www.dba-oracle.com\/t_compiled_pl_sql.htm."},{"key":"e_1_2_1_9_1","unstructured":"[n.d.]. PL\/SQL Function Result Cache. http:\/\/www.oracle.com\/technetwork\/issue-archive\/2010\/10-sep\/o57plsql-088600.html.  [n.d.]. PL\/SQL Function Result Cache. http:\/\/www.oracle.com\/technetwork\/issue-archive\/2010\/10-sep\/o57plsql-088600.html."},{"key":"e_1_2_1_10_1","unstructured":"[n.d.]. PL\/SQL: Oracle's Procedural Extension to SQL. http:\/\/www.oracle.com\/technology\/tech\/pl_sql.  [n.d.]. PL\/SQL: Oracle's Procedural Extension to SQL. http:\/\/www.oracle.com\/technology\/tech\/pl_sql."},{"key":"e_1_2_1_11_1","unstructured":"[n.d.]. Scalar UDF Inlining. https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/user-defined-functions\/scalar-udf-inlining?view=sql-server-ver15.  [n.d.]. Scalar UDF Inlining. https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/user-defined-functions\/scalar-udf-inlining?view=sql-server-ver15."},{"key":"e_1_2_1_12_1","unstructured":"[n.d.]. SQL Persisted Stored Modules. https:\/\/en.wikipedia.org\/wiki\/SQL\/PSM.  [n.d.]. SQL Persisted Stored Modules. https:\/\/en.wikipedia.org\/wiki\/SQL\/PSM."},{"key":"e_1_2_1_13_1","unstructured":"[n.d.]. SQL-ProcBench Benchmark Specification: Schema Queries and Objects. https:\/\/aka.ms\/sqlprocbench.  [n.d.]. SQL-ProcBench Benchmark Specification: Schema Queries and Objects. https:\/\/aka.ms\/sqlprocbench."},{"key":"e_1_2_1_14_1","unstructured":"[n.d.]. SQL:2011 or ISO\/IEC 9075:2011. https:\/\/en.wikipedia.org\/wiki\/SQL:2011.  [n.d.]. SQL:2011 or ISO\/IEC 9075:2011. https:\/\/en.wikipedia.org\/wiki\/SQL:2011."},{"key":"e_1_2_1_15_1","unstructured":"[n.d.]. Subprogram Inlining in Oracle. https:\/\/docs.oracle.com\/cd\/B28359_01\/appdev.111\/-b28370\/inline_pragma.htm.  [n.d.]. Subprogram Inlining in Oracle. https:\/\/docs.oracle.com\/cd\/B28359_01\/appdev.111\/-b28370\/inline_pragma.htm."},{"key":"e_1_2_1_16_1","unstructured":"[n.d.]. T-SQL User-Defined Functions: the good the bad and the ugly. http:\/\/sqlblog.com\/blogs\/hugo_kornelis\/archive\/2012\/05\/20\/t-sql-user-defined-functions-the-good-the-bad-and-the-ugly-part-1.aspx.  [n.d.]. T-SQL User-Defined Functions: the good the bad and the ugly. http:\/\/sqlblog.com\/blogs\/hugo_kornelis\/archive\/2012\/05\/20\/t-sql-user-defined-functions-the-good-the-bad-and-the-ugly-part-1.aspx."},{"key":"e_1_2_1_17_1","unstructured":"[n.d.]. The LLVM Compiler Infrastructure. http:\/\/llvm.org\/.  [n.d.]. The LLVM Compiler Infrastructure. http:\/\/llvm.org\/."},{"key":"e_1_2_1_18_1","unstructured":"[n.d.]. The TPC-DS Benchmark Specification. http:\/\/www.tpc.org.  [n.d.]. The TPC-DS Benchmark Specification. http:\/\/www.tpc.org."},{"key":"e_1_2_1_19_1","unstructured":"[n.d.]. TPC-C and TPC-E. TPC-C and TPC-E Benchmark Specification. http:\/\/www.tpc.org.  [n.d.]. TPC-C and TPC-E. TPC-C and TPC-E Benchmark Specification. http:\/\/www.tpc.org."},{"key":"e_1_2_1_20_1","unstructured":"[n.d.]. Transact SQL. https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/language-elements-transact-sql.  [n.d.]. Transact SQL. https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/language-elements\/language-elements-transact-sql."},{"key":"e_1_2_1_21_1","unstructured":"2005. The TPC-H Benchmark Specification. http:\/\/www.tpc.org.  2005. The TPC-H Benchmark Specification. http:\/\/www.tpc.org."},{"key":"e_1_2_1_22_1","unstructured":"2020. The Java Database Connectivity API. https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/jdbc\/.  2020. The Java Database Connectivity API. https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/jdbc\/."},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/2213836.2213959"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1007\/s00778-015-0395-0"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/3395032.3395322"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2499370.2462180"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3035918.3058728"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/2463676.2463710"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3318464.3389707"},{"key":"e_1_2_1_30_1","volume-title":"arXiv e-prints (Sep","author":"Duta Christian","year":"2019"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/3035918.3058747"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/2882903.2882926"},{"key":"e_1_2_1_33_1","volume-title":"SQLoop: High Performance Iterative Processing in Data Management. In 38th IEEE International Conference on Distributed Computing Systems, ICDCS 2018","author":"Floratos Sofoklis","year":"2018"},{"key":"e_1_2_1_34_1","first-page":"22","article-title":"Compilation in the Microsoft SQL Server Hekaton Engine","volume":"37","author":"Freedman Craig","year":"2014","journal-title":"IEEE Data Eng. Bull."},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/3318464.3389736"},{"key":"e_1_2_1_37_1","volume-title":"Rewriting Procedures for Batched Bindings. In Intl. Conf. on Very Large Databases.","author":"Guravannavar Ravindra","year":"2008"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3318464.3389766"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3318464.3384678"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.5555\/3275366.3284966"},{"key":"e_1_2_1_41_1","doi-asserted-by":"crossref","unstructured":"A. Kohn V. Leis and T. Neumann. 2019. Making Compiling Query Engines Practical. IEEE Transactions on Knowledge and Data Engineering (2019) 1--1.  A. Kohn V. Leis and T. Neumann. 2019. Making Compiling Query Engines Practical. IEEE Transactions on Knowledge and Data Engineering (2019) 1--1.","DOI":"10.1109\/TKDE.2019.2905235"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.2010.5447892"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.14778\/2850583.2850594"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.14778\/3425879.3425882"},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.14778\/2002938.2002940"},{"key":"e_1_2_1_46_1","volume-title":"https:\/\/www.bibsonomy.org\/bibtex\/26dc770318eb757ebc65ac4c3bce019d2\/christophv","author":"O'Neil Pat","year":"2009"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/3299869.3324960"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/3186728.3164140"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/3400903.3400915"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/2882903.2915244"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/3318464.3389728"},{"key":"e_1_2_1_52_1","volume-title":"ICDE","author":"Simhadri V.","year":"2014"},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","DOI":"10.1145\/1995441.1995446"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/3183713.3196893"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.2014.6816765"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.2017.234"}],"container-title":["Proceedings of the VLDB Endowment"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.14778\/3457390.3457402","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2022,12,28]],"date-time":"2022-12-28T10:46:21Z","timestamp":1672224381000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.14778\/3457390.3457402"}},"subtitle":["understanding their usage in the wild"],"short-title":[],"issued":{"date-parts":[[2021,4]]},"references-count":55,"journal-issue":{"issue":"8","published-print":{"date-parts":[[2021,4]]}},"alternative-id":["10.14778\/3457390.3457402"],"URL":"https:\/\/doi.org\/10.14778\/3457390.3457402","relation":{},"ISSN":["2150-8097"],"issn-type":[{"value":"2150-8097","type":"print"}],"subject":[],"published":{"date-parts":[[2021,4]]}}}