@@ -21,65 +21,84 @@ license: |
21
21
22
22
### Description
23
23
24
- Executes a sql statement provided as a ` STRING ` , optionally passing ` arg_exprN ` to parameter markers and assigning the results to ` var_nameN ` .
24
+ Executes a SQL statement provided as a ` STRING ` .
25
+ The statement optionally passes arguments to parameter markers and assigns the results to variables.
25
26
26
27
### Syntax
27
28
28
29
``` sql
29
30
EXECUTE IMMEDIATE sql_string
30
- [ INTO var_name [, …] ]
31
- [ USING { ( arg_expr [ AS ] [alias] [, …] ) | arg_expr [ AS ] [alias] [, …] } ]
31
+ [ INTO var_name [, ...] ]
32
+ [ USING { arg_expr [ AS ] [alias] } [, ...] ]
32
33
```
33
34
35
+ For compatibility with other SQL dialects, ` EXECUTE IMMEDIATE ` also supports ` USING ( { arg_expr [ AS ] [alias] } [, ...] ) `
36
+
34
37
### Parameters
35
38
36
39
* ** sql_string**
37
40
38
- A STRING expression producing a well-formed SQL statement.
41
+ A constant expression of type ` STRING ` , producing a well-formed SQL statement.
42
+
43
+ * ** INTO var_name [ , ...] **
44
+
45
+ Optionally returns the results of a single row query into SQL variables.
46
+ If the query returns no rows the result is ` NULL ` .
47
+
48
+ If the statement is not a query, Spark raises ` INVALID_STATEMENT_FOR_EXECUTE_INTO ` error.
49
+
50
+ If the query returns more than one row, Spark raises ` ROW_SUBQUERY_TOO_MANY_ROWS ` error.
39
51
40
- * ** INTO var_name [ , … ] **
52
+ * ** var_name**
41
53
42
- Optionally returns the results of a single row query into SQL variables.
43
- If the query returns no rows the result is NULL.
44
- - ` var_name `
45
54
A SQL variable. A variable may not be referenced more than once.
46
55
47
- * ** USING arg_expr [ , … ] **
56
+ * ** USING { arg_expr [ AS ] [ alias ] } [ , ... ] **
48
57
49
- Optionally, if sql_string contains parameter markers, binds in values to the parameters.
50
- - ` arg_expr `
51
- An expression that binds to a parameter marker.
52
- If the parameter markers are unnamed the binding is by position.
53
- For unnamed parameter markers, binding is by name.
54
- - ` alias `
55
- Overrides the name used to bind ` arg_expr ` to a named parameter marker
58
+ Optionally, if ` sql_string ` contains parameter markers, binds in values to the parameters.
56
59
57
- Each named parameter marker must be matched once. Not all arg_expr must be matched.
60
+ * ** arg_expr**
58
61
62
+ A constant expression that binds to a parameter marker.
63
+ If the parameter markers are unnamed, the binding is by position.
64
+ For named parameter markers, binding is by name.
65
+
66
+ * ** alias**
67
+
68
+ Overrides the name used to bind ` arg_expr ` to a named parameter marker.
69
+ Each named parameter marker must be matched once. Not all ` arg_expr ` must be matched.
59
70
60
71
### Examples
61
72
62
73
``` sql
63
74
-- A self-contained execution using a literal string
64
- EXECUTE IMMEDIATE ' SELECT SUM(col1 ) FROM VALUES(?), (?)' USING 5 , 6 ;
75
+ EXECUTE IMMEDIATE ' SELECT SUM(c1 ) FROM VALUES(?), (?) AS t(c1 )' USING 5 , 6 ;
65
76
11
66
77
67
78
-- A SQL string composed in a SQL variable
68
- DECLARE sqlStr = ' SELECT SUM(col1 ) FROM VALUES(?), (?)' ;
79
+ DECLARE sqlStr = ' SELECT SUM(c1 ) FROM VALUES(?), (?) AS t(c1 )' ;
69
80
DECLARE arg1 = 5 ;
70
81
DECLARE arg2 = 6 ;
71
82
EXECUTE IMMEDIATE sqlStr USING arg1, arg2;
72
83
11
73
84
74
85
-- Using the INTO clause
75
86
DECLARE sum INT ;
87
+ DECLARE sqlStr = ' SELECT SUM(c1) FROM VALUES(:first), (:second) AS t(c1)' ;
76
88
EXECUTE IMMEDIATE sqlStr INTO sum USING arg1, arg2;
77
89
SELECT sum;
78
90
11
79
91
80
92
-- Using named parameter markers
81
- SET VAR sqlStr = ' SELECT SUM(col1) FROM VALUES(:first), (:second)' ;
82
- EXECUTE IMMEDIATE sqlStr INTO sum USING 5 AS first, arg2 AS second;
93
+ DECLARE sum INT ;
94
+ DECLARE sqlStr = ' SELECT SUM(c1) FROM VALUES(:first), (:second) AS t(c1)' ;
95
+ EXECUTE IMMEDIATE sqlStr INTO sum USING (5 AS first, arg2 AS second);
83
96
SELECT sum;
84
97
11
98
+
99
+ -- Using constant expressions
100
+ DECLARE foo = ' sum' ;
101
+ EXECUTE IMMEDIATE ' SELECT ' || foo || ' (c1) FROM VALUES(?), (?) AS t(c1)'
102
+ USING 5 + 6 , 7 + length(' hello' );
103
+ 33
85
104
```
0 commit comments