Comparison of SQL syntax[Encyclopedia]

Comparison of SQL syntax

From Wikipedia, the free encyclopedia

Jump to: navigation, search

This article gives a brief summary of various SQL syntax differences used in popular SQL engines:

Contents

[hide]

<script type="text/javascript"> // </script>

[edit] Data structure definition

[edit] Delimited identifiers

A method to somehow escape identifiers (table, column names, etc), so they do not have to obey regular identifier rules, such as not colliding with keywords, having some distinct characters, etc. The SQL standard calls these "delimited identifiers". The SQL standard requires that delimited identifiers are case-sensitive, although not all servers enforce this.

  • DB2: "identifier", case sensitive per standard and also allows special characters
  • Firebird/InterBase: "identifier", case sensitive per standard
  • MSSQL and Sybase ASE: [identifier] (recommended) or "identifier" (if the quoted_identifier option is set on — otherwise, "identifier" would be parsed as a string in single quotes). Case sensitivity is set by a per-database option.
  • MySQL: `identifier` (always) or "identifier" (if running in ANSI mode) or without escaping
  • Oracle: "identifier" (note that Oracle's delimited identifiers are case-sensitive, and all regular identifiers are usually in upper case)
  • PostgreSQL: "identifier" or without escaping
  • SQLite: identifier without escaping
  • OpenLink Virtuoso: "identifier"

[edit] Auto-increment column

  • DB2: Identity columns or sequences combined with triggers (comparison of both techniques)
CREATE TABLE table_name ( column_name INT GENERATED ALWAYS AS IDENTITY )

or

CREATE SEQUENCE sequenze_name;

CREATE TABLE table_name ( column_name INT );

CREATE TRIGGER insert_trigger
   NO CASCADE BEFORE INSERT ON table_name
   REFERENCING NEW AS n
   FOR EACH ROW
   SET n.column_name = NEXTVAL FOR sequence_name;
CREATE table (column INTEGER NOT NULL PRIMARY KEY);;

CREATE GENERATOR table_gen;;
SET GENERATOR table_gen TO 0;;

CREATE TRIGGER t_column_gen FOR table_gen
BEFORE INSERT
AS
BEGIN
  NEW.column = GEN_ID(table_gen, 1);
END;; 
  • MySQL: CREATE TABLE table (column INT NOT NULL PRIMARY KEY AUTO_INCREMENT)
  • MSSQL: CREATE TABLE table (column INT IDENTITY(1,1))
  • Oracle:
CREATE TABLE table (column NUMBER PRIMARY KEY);
CREATE SEQUENCE sequence START WITH 1 INCREMENT BY 1;
CREATE OR REPLACE TRIGGER trigger BEFORE INSERT ON table REFERENCING NEW AS NEW FOR EACH ROW
BEGIN
  SELECT sequence.nextval INTO :NEW.ID FROM dual;
END;
IDENTITY (start with 1, increment by 1);
CREATE TABLE table (column INTEGER IDENTITY);

or

CREATE TABLE table (column INTEGER IDENTITY (start with 1));
  • SQLite: CREATE TABLE table (column INTEGER NOT NULL PRIMARY KEY [AUTOINCREMENT])

[edit] Functions and expressions

[edit] Math functions

[edit] Trigonometric functions
ANSI/ISO SQL LevelFeature-IDFunctionDB2SQLiteMySQLPostgreSQLFirebird[1]OpenLink VirtuosoOracleMSSQL
  Arc sineASIN(x)N/AASIN(x)ASIN(x)ASIN(x)ASIN(x)ASIN(x)ASIN(x)
  Arc cosineACOS(x)N/AACOS(x)ACOS(x)ACOS(x)ACOS(x)ACOS(x)ACOS(x)
  Arc tangent of xATAN(x)N/AATAN(x)ATAN(x)ATAN(x)ATAN(x)ATAN(x)ATAN(x)
  Arc tangent of x and yATAN2(x, y)N/AATAN2(x, y)
ATAN(x, y)
ATAN2(x,y)ATAN2(x,y)ATAN2(x, y)ATAN2(x, y)ATN2(x, y)
  SineSIN(x)N/ASIN(x)SIN(x)SIN(x)SIN(x)SIN(x)SIN(x)
  CosineCOS(x)N/ACOS(x)COS(x)COS(x)COS(x)COS(x)COS(x)
  TangentTAN(x)N/ATAN(x)TAN(x)TAN(x)TAN(x)TAN(x)TAN(x)
  CotangentCOT(x)N/ACOT(x)COT(x)COT(x)COT(x)N/ACOT(x)
  Hyperbolic sineSINH(x)N/AN/AN/ASINH(x)N/ASINH(x)N/A
  Hyperbolic cosineCOSH(x)N/AN/AN/ACOSH(x)N/ACOSH(x)N/A
  Hyperbolic tangentTANH(x)N/AN/AN/ATANH(x)N/ATANH(x)N/A

Notes:

  1. Firebird users need to register functions to make them available. The registration is done once for each database.

[edit] Numeric functions
ANSI/ISO SQL LevelFeature-IDFunctionDB2SQLiteMySQLPostgreSQLFirebirdOpenLink VirtuosoOracleMSSQL
SQL:2003/200nT441Absolute value of xABS(x)ABS(x)ABS(x)ABS(x)ABS(x)ABS(x)ABS(x)ABS(x)
  Sign of numberSIGN(x)N/ASIGN(x)SIGN(x)SIGN(x)[1]SIGN(x)SIGN(x)SIGN(x)
SQL:2003/200nT441Modulus (remainder) of x / yMOD(x, y)x % yx % y
MOD(x, y)
x % y
MOD(x, y)
MOD(x,y)MOD(x,y)MOD(x, y)x % y
SQL:2003/200nT621Smallest integer >= xCEILING(x)
CEIL(x)
N/ACEILING(x)
CEIL(x)
CEILING(x)
CEIL(x)
CEILING(x)CEILING(x)CEIL(x)CEILING(x)
SQL:2003/200nT621Largest integer <= xFLOOR(x)N/AFLOOR(x)FLOOR(x)FLOOR(x)FLOOR(x)FLOOR(x)FLOOR(x)
  Round x (to precision of d digits)ROUND(x, d)ROUND(x[, d])ROUND(x[, d])ROUND(x[, d])ROUND(x,d)[1]ROUND(x)ROUND(x)ROUND(x[, d])
  Truncate x to n decimal placesTRUNCATE(x, n)
TRUNC(x, n)
N/ATRUNCATE(x[, dn)TRUNC(x[, y])N/AN/ATRUNCN/A
SQL:2003/200nT621Square rootSQRT(x)N/ASQRT(x)SQRT(x)SQRT(x)SQRT(x)SQRT(x)SQRT(x)
SQL:2003/200nT621Exponent of x (ex)EXP(x)N/AEXP(x)EXP(x)?EXP(x)EXP(x)EXP(x)
SQL:2003/200nT621Power (xy)POWER(x, y)N/APOWER(x, y)
POW(x, y)
POWER(x, y)POWER(x, y)[1]POWER(x,y)POWER(x, y)POWER(x, y)
SQL:2003/200nT621Natural logarithm of xLN(x)N/ALN(x)LN(x)LN(x)LOG(x)LN(x)LOG(x)
  Logarithm, any baseLOG(b, x)N/ALOG(b, x)LOG(b, x)LOG(b, x)LOG(x)LOG(x)N/A
  Logarithm, base 10LOG10(x)N/ALOG10(x)LOG(x)LOG10(x)LOG(x)LOG(x)LOG10(x)
  Randomize, set seed to xRAND(x)N/ARAND(x)SETSEED(x)?RANDOMIZE([x])random()[2]RAND(x)
  Generate random numberRAND()RANDOM()RAND()RANDOM()RAND()RND()N/ARAND()
  Highest number in listN/AMAX(list)GREATEST(list)MAX()
GREATEST(list)
MAX()MAX(list)GREATEST(list)N/A
  Lowest number in listN/AMIN(list)LEAST(list)MIN()
LEAST(list)
MIN(list)MIN(list)LEAST(list)N/A
SQL-92F261-04Convert number if NULLCOALESCE COALESCECOALESCECOALESCEISNULLCOALESCECOALESCE

Notes:

  1. Firebird users need to install rFunc library for ROUND and POWER functions.
  2. The random() function in Oracle can be found in the built-in DBMS package dbms_random.
  1.  

[edit] Aggregate functions
ANSI/ISO SQL LevelFeature-IDFunctionDB2SQLiteMySQLPostgreSQLFirebirdOpenLink VirtuosoOracleMSSQL
SQL:2003/200n (core)E091-02Count non-NULL values in xCOUNT([DISTINCT] x)?COUNT([DISTINCT] x)COUNT(x)COUNT([DISTINCT] x)??COUNT([DISTINCT] x)
SQL:2003/200n (core)E091-05Sum of xSUM([DISTINCT] x)?SUM(x)SUM(x)SUM(x)??SUM([DISTINCT] x)
SQL:2003/200n (core)E091-01Average of xAVG([DISTINCT] x)?AVG([DISTINCT] x)AVG(x)AVG(x)??AVG([DISTINCT] x)
SQL:2003/200n Minimum value in xMIN(x)MIN(x)MIN(x)MIN(x)MIN(x)??MIN(x)
SQL:2003/200n Maximum value in xMAX(x)MAX(x)MAX(x)MAX(x)MAX(x)??MAX(x)
SQL:2003/200n Range (max - min) of xMAX(x) - MIN(x)?N/A????N/A
SQL:2003/200n Standard deviationSTDDEV([DISTINCT] x)N/ASTD(x)
STDDEV(x)
STDDEV_POP(x)
STDDEV(x)N/ASTDDEV(x, y)STDDEV([DISTINCT|ALL] x)STDEV(x)
STDEVP(x)
SQL:2003/200n VarianceVARIANCE([DISTINCT] x)N/AVARIANCE(x)
VAR_POP(x)
VARIANCE(x)N/AVAR(x)VARIANCE(x)VAR(x)
VARP(x)

[edit] Date and time functions

ANSI/ISO SQL LevelFeature-IDFunctionDB2SQLiteMySQLPostgreSQLFirebirdOpenLink VirtuosoOracleMSSQL
  Date additiondate + argN/ADATE_ADDarg1 + arg2arg1 + arg2DATEADDarg1 + arg2DATEADD
  Date subtractiondate - argN/ADATE_SUBarg1 - arg2arg1 - arg2DATEDIFFarg1 - arg2DATEDIFF
  Date differencedate1 - date2N/ADATEDIFFAGEarg1 - arg2DATEDIFFarg1 - arg2DATEDIFF
  Last day of monthdate + 1 MONTH - DAY(date) DAYSN/ALAST_DAYN/ALASTDAYMONTH[1]N/ALAST_DAYN/A
  Time zone conversion N/ACONVERT_TZTIMEZONEN/ATIMEZONENEW_TIMEN/A
  First weekday after date N/A N/AN/AN/ANEXT_DAYN/A
SQL:2003/200n (core)F051-04Convert date to stringTO_CHAR(value, format)
VARCHAR_FORMAT(value, format)
STRFTIME(format, value)DATE_FORMAT(value, format)TO_CHAR(value, format)CAST(value, datetype)
DATETOSTR[1]
CASTTO_CHARDATENAME
SQL:2003/200n (core)F051-04Convert date to numberINT(date)N/A DATE_PARTEXTRACTCASTTO_NUMBER(TO_CHAR())DATEPART
SQL:2003/200n (core)F051-04Convert string to dateDATE(value)
TIMESTAMP(value)
N/A TO_DATECASTSTRINGDATETO_DATECAST
SQL:2003/200n (core)F051-06Get current dateCURRENT_DATECURRENT_DATECURDATE, CURRENT_DATECURRENT_DATECURRENT_DATECURDATESYSDATEN/A
SQL:2003/200n (core_F051-01Get current timeCURRENT_TIMECURRENT_TIMECURTIME, CURRENT_TIMECURRENT_TIMECURRENT_TIMECURTIMEN/AN/A
SQL:2003/200n (core)F051-01Get current date and timeCURRENT_TIMESTAMPCURRENT_TIMESTAMPNOW(), CURRENT_TIMESTAMPNOW(), CURRENT_TIMESTAMPCURRENT_TIMESTAMP, 'NOW'NOWSYSTIMESTAMPGETDATE()

Notes:

  1. Firebird users might need to install rFunc library for some functions.

[edit] String functions

ANSI/ISO SQL LevelFeature-IDFunctionDB2SQLiteMySQLPostgreSQLFirebirdOpenLink VirtuosoOracleMSSQL
SQL:2003/200n Convert character x to ASCIIASCII(x)N/AASCII(x)ASCII(x)ASCII_CHAR(x)[1]ASCII(x)ASCII(x)ASCII(x)
SQL:2003/200n Convert ASCII x to characterCHR(x)N/ACHAR(x)CHR(x)ASCII_VAL(x)[1]CHR(x)CHR(x)CHAR(x)
SQL:2003/200n (core)E021-07String concatenatestring1 || string2
string1 CONCAT string2
arg1 || arg2CONCAT (multiple arguments)arg1 || arg2arg1 || arg2CONCAT(list)arg1 || arg2
CONCAT (only 2 arguments)
arg1 + arg2
SQL:2003/200n (core)E021-11Find first occurrence of substring in stringLOCATE(search, string[, start])
POSSTR(string, search)
N/AINSTR
LOCATE
POSITION
POSITION
STRPOS
N/ASUBSTRINSTRCHARINDEX
SQL:2003/200n Find first occurrence of pattern in string N/A  STRPOS[1]INSTRINSTRPATINDEX
SQL:2003/200n (core)E021-08Convert x to lowercaseLOWER(x)
LCASE(x)
LOWER(x)LOWER(x)
LCASE(x)
LOWER(x)LOWER(x)[1]LCASE(x)LOWER(x)LOWER(x)
SQL:2003/200n (core)E021-08Convert x to uppercaseUPPER(x)
UCASE(x)
UPPER(x)UPPER(x)
UCASE(x)
UPPER(x)UPPER(x)[1]UCASE(x)/UPPER(x)UPPER(x)UPPER(x)
SQL:2003/200n Pad left side N/ALPADLPADLPAD[1]N/ALPADN/A
SQL:2003/200n Pad right side N/ARPADRPADRPAD[1]N/ARPADN/A
  Remove leading blank spacesLTRIM(x)N/ALTRIMLTRIMLTRIM[1]LTRIMLTRIMLTRIM
  Remove trailing blank spacesRTRIM(x)N/ARTRIMRTRIMRTRIM[1]RTRIMRTRIMRTRIM
SQL:2003/200n (core)E021-09Remove leading and trailing blankLTRIM(RTRIM(x))N/ATRIMTRIMN/ATRIMTRIMN/A
SQL:2003/200n Repeat string multiple timesREPEAT(str, num)N/AREPEATREPEATSTRREPEAT[1]REPEATRPADREPLICATE
SQL:2003/200n String of repeated spacesSPACE(num)N/ASPACEN/ARPAD[1]SPACERPADSPACE
SQL:2003/200n Convert number to stringCHAR(num)   CAST TO_CHARSTR
SQL:2003/200n (core)E021-06SubstringSUBSTR(str, length[, start])SUBSTRSUBSTRING
SUBSTR
SUBSTRING
SUBSTR
SUBSTRING
SUBSTR
SUBSTRLEN
SUBSTRSUBSTRSUBSTRING
  Replace charactersREPLACE(string, from, to)N/AREPLACEREPLACEN/AREPACEREPLACESTUFF
  Capitalize first letter of each word in string N/AN/AINITCAPN/AINITCAPINITCAPN/A
  Translate character stringTRANSLATE(string, to, from)N/AN/ATRANSLATEN/A TRANSLATEN/A
SQL:2003/200n (core)E021-04Length of string x (in characters)LENGTH(x)LENGTH(x)CHAR_LENGTH(x)CHAR_LENGTH(x)
CHARACTER_LENGTH(x)
STRLEN(x)[1]LENGTH(x)LENGTH(x)LEN(x)
SQL:2003/200n (core)E021-05Length of string x (in bytes)LENGTH(x)LENGTH(x)LENGTH(x)OCTET_LENGTH(x)N/ALENGTH(x) DATALENGTH(x)
SQL:2003/200n (core)E091-03Greatest character string in list MAX  MAXMAXGREATESTN/A
SQL:2003/200n (core)E091-04Least character string in list MIN  MINMINLEASTN/A
SQL-92 If x is NULL then return def else return xCOALESCE(x, def) COALESCE(x, def)COALESCE(x, def)COALESCE(x, def) COALESCE(x, def)COALESCE(x, def)
  Quote SQL in string x QUOTE(x)QUOTE(x) N/AQUOTE_LITERAL(x) QUOTENAME(x,'''')
  Soundex index of string xSOUNDEX(x)SOUNDEX(x)SOUNDEX(x)N/AN/AN/ASOUNDEX(x)SOUNDEX(x)
  Calculate MD5 hash from string N/AMD5MD5N/AN/AN/AHASHBYTES('MD5',x)
  Calculate SHA1 hash from string N/ASHA1N/AN/A{{n/a}N/AHASHBYTES('SHA1',x)

Notes:

  1. Firebird users need to register most of these functions to make them available. The registration is done once for each database. Additional rFunc library is needed for some functions.

[edit] SQL/XML functions

SQLX better known as SQL/XML is an ISO standard (ISO/IEC 9075-1) whose extensions that are part of the SQL 2003 standard.

FunctionDescriptionDB2SQLiteMySQLPostgreSQLFirebirdOpenLink VirtuosoOracleMSSQL
VersionSoftware Version(s) SupportedV9N/APlannedN/AN/A3.5-4.x9-10xN/A
XMLElement()Create an XML ElementXMLElement()N/APlannedN/AN/AXMLElement()XMLElement()N/A
XMLForest()Create an XML Fragment from passed-in components.XMLForest()N/APlannedN/AN/AXMLForest()XMLForest()N/A
XMLColAttVal()Create an XML fragment and then expands the resulting XML so that each XML fragment has the name "column" with the attribute "name" N/APlannedN/AN/AXMLColAttVal()XMLColAttVal()N/A
ExtractValue()Takes as arguments an XMLType instance and an XPath expression and returns a scalar value of the resultant node. N/APlannedN/AN/AExtractValue()ExtractValue()N/A
XMLTransform()Takes as arguments an XMLType instance and an XSL style sheet, which is itself a form of XMLType instance. It applies the style sheet to the instance and returns an XMLType. N/APlannedN/AN/AXMLTransform()XMLTransform()N/A
XMLSequence()Takes input and returns either a varray of the top-level nodes in the XMLType, or an XMLSequence type an XML document for each row of the cursor. N/APlannedN/AN/AXMLSequence()XMLSequence()N/A
XMLConcat()Takes as input a series of XMLType instances, concatenates the series of elements for each row, and returns the concatenated series.XMLConcatN/APlannedN/AN/AXMLConcat()XMLConcat()N/A
UpdateXML()Takes as arguments an XMLType instance and an XPath-value pair, and returns an XMLType instance with the updated value. N/APlannedN/AN/AUpdateXML()UpdateXML()N/A

[edit] Select queries

[edit] Select without tables

VALUES

or

SELECT expressions FROM sysibm.sysdummy1
SELECT expressions FROM rdb$database
SELECT expressions
SELECT expressions FROM dual

[edit] Limiting results of select query

Note that end_row = start_row + num_rows - 1

DB2 SELECT colums FROM table FETCH FIRST num_rows ONLY
Firebird SELECT FIRST num_rows SKIP start_row columns FROM table
MSSQLSimple version
(when start_row = 1)
SELECT TOP num_rows columns FROM table
Complex version
(full-featured, requires ordering)
SELECT * FROM (
  SELECT TOP num_rows columns FROM (
    SELECT TOP num_rows + start_row columns FROM table ORDER BY some_key ASC
  ) AS newtable ORDER BY some_key DESC
) AS newtable2 ORDER BY some_key ASC
MySQLVersions > 4.0.14SELECT columns FROM table LIMIT num_rows OFFSET start_row
All versionsSELECT columns FROM table LIMIT start_row, num_rows
OracleSimple querySELECT columns FROM table WHERE rownum >= start_row AND rownum <= end_row
Complex query
(when ORDER BY is used)
SELECT * FROM (
  SELECT temporaryalias.*, rownum num FROM (
    SELECT columns FROM table ORDER BY columns
  ) temporaryalias WHERE rownum <= end_row
) WHERE num >= start_row
PostgreSQL SELECT columns FROM table LIMIT num_rows OFFSET start_row
SQLite SELECT columns FROM table LIMIT num_rows OFFSET start_row
OpenLink Virtuoso SELECT columns FROM table LIMIT num_rows

[edit] Write queries

[edit] Replace query

Replace query inserts new row if no row with such primary key exists or updates existing row if it does.
Note: this is not part of SQL standards, it is only a MySQL extension.

  • DB2: MERGE statement
MERCE INTO phonebook AS p
   USING ( VALUES ('john doe', '1234' ) ) AS v(name, extension)
   ON ( p.name = v.name )
   WHEN MATCHED
      UPDATE SET p.extension = v.extension
   WHEN NOT MATCHED
      INSERT VALUES ( v.name, v.extension )
  • MySQL: Allows 3 syntaxes: non-standard REPLACE query, (since 4.1) INSERT ... ON DUPLICATE KEY UPDATE, and a varient on IF EXISTS.
REPLACE [INTO] table [(columns)] VALUES (values)
INSERT INTO table (columns) VALUES (values) ON DUPLICATE KEY UPDATE column1=value1, column2=value2
IF EXISTS( SELECT * FROM phonebook WHERE name = 'john doe' )
THEN UPDATE phonebook SET extension = '1234' WHERE name = 'john doe'
ELSE INSERT INTO phonebook VALUES( 'john doe','1234' )
END IF
  • rest of the world writes
IF EXISTS( SELECT * FROM phonebook WHERE name = 'john doe' )
UPDATE phonebook SET extension = '1234' WHERE name = 'john doe'
ELSE
INSERT INTO phonebook VALUES( 'john doe','1234' )

[edit] Insert results from select query into existing table

INSERT INTO existing_table SELECT columns FROM table

[edit] Save results from select query as table

SELECT columns INTO new_table FROM table
CREATE TABLE new_table [AS] SELECT columns FROM table

[edit] Transactions

 StartCommitRollbackPrepareExecute prepared
DB2ImplicitCOMMIT [ WORK ]ROLLBACK [ WORK ]??
SQLiteBEGIN [TRANSACTION]COMMIT [TRANSACTION]ROLLBACK [TRANSACTION]??
MySQLBEGIN [WORK],
START [TRANSACTION]
??
PostgreSQLPREPARE TRANSACTION transaction_idEXECUTE TRANSACTION transaction_id
FirebirdImplicit,
SET TRANSACTION
??
OpenLink VirtuosoImplicitCOMMIT WORK [TRANSACTION]ROLLBACK WORK [TRANSACTION]??
OracleImplicit
  • a COMMIT statement is executed
  • any DDL statement is executed
  • a user disconnects normally
  • a ROLLBACK statement is executed
  • a user process is terminated abnormally
??
MSSQLBEGIN TRAN[SACTION]COMMIT [TRAN[SACTION]]ROLLBACK [TRAN[SACTION]]??

[edit] SQL Procedure language

[edit] Stored procedures

DatabaseCreate syntaxCalling
DB2
CREATE PROCEDURE procedure_name(...)
   BEGIN
   /* SQL code */
   END
CALL procedure_name(...)
SQLite

N/A

N/A

MySQL
DELIMITER $

CREATE PROCEDURE nameprocedure
  (input_parameter_name datatype, ... )
BEGIN
  /* SQL code */
END$

DELIMITER ;
CALL nameprocedure(...)
PostgreSQL
CREATE FUNCTION function_name
  (input_parameter_name datatype, ...)
RETURNS return_type
AS $
DECLARE
  variable_name datatype;
BEGIN
  /* SQL code */
END;
$ LANGUAGE plpgsql;
SELECT function_name(...)
Firebird
SET TERM $ ;

CREATE PROCEDURE nameprocedure
  (input_parameter_name datatype, ... ) 
RETURNS 
  (output_parameter_name datatype, ... )
AS 
DECLARE VARIABLE variable_name datatype;
BEGIN
  /* SQL code */
END$

SET TERM ; $
SELECT ... FROM function_name(...)
EXECUTE function_name(...)
OpenLink Virtuoso  
Oracle  
MSSQL
CREATE PROCEDURE nameprocedure
  (input_parameter_name datatype, ... )
AS
  /* SQL code */
GO
EXEC nameprocedure(...)

[edit] User defined functions (UDF)

DatabaseCreate syntaxCalling
DB2
CREATE FUNCTION function_name
  (input_parameter_name datatype, ...)
RETURNS return_type
BEGIN
   /* SQL code */
END
VALUES function_name(...)

or

SELECT function_name(...) FROM ... WHERE function_name(...) = ...
SQLite

N/A

N/A

MySQL
DELIMITER $

CREATE FUNCTION function_name
  (input_parameter_name datatype, ... )
RETURNS datatype
BEGIN
RETURN
  /* SQL code */
END$

DELIMITER ;
SELECT function_name(...)
PostgreSQL
CREATE FUNCTION function_name
  (input_parameter_name datatype, ...)
RETURNS datatype
AS $
DECLARE
  variable_name datatype;
BEGIN
  /* SQL code */
END;
$ LANGUAGE plpgsql;
SELECT function_name(...)
Firebird

UDFs are written in external tools and compiled into executable form.
They are dynamically loaded at runtime.
In order for server to pick them up, they need to be registered, like this:

DECLARE EXTERNAL FUNCTION function_name [datatype, ...]
RETURNS datatype
ENTRY_POINT 'entryname'
MODULE_NAME 'modulename';
SELECT function_name(...)
OpenLink Virtuoso  
Oracle  
MSSQL  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值