{"id":12278,"date":"2024-01-12T13:10:38","date_gmt":"2024-01-12T12:10:38","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?p=12278"},"modified":"2024-06-17T11:13:32","modified_gmt":"2024-06-17T09:13:32","slug":"islandsql-episode-5-select","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/","title":{"rendered":"IslandSQL Episode 5: Select in Oracle Database 23c"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the&nbsp;<a href=\"https:\/\/www.salvis.com\/blog\/2023\/03\/05\/islandsql-episode-4-expressions\/\">last episode<\/a>, we extended the expressions in the IslandSQL grammar to complete the <code>lock table<\/code> statement. The grammar now fully covers expressions, conditions and the <code>select<\/code> statement. In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the <code>select<\/code> statement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The full source code is available on&nbsp;<a href=\"https:\/\/github.com\/IslandSQL\/IslandSQL\/tree\/v0.5.0\">GitHub<\/a>, the binaries are on&nbsp;<a href=\"https:\/\/central.sonatype.com\/artifact\/ch.islandsql\/islandsql\/0.5.0\">Maven Central<\/a> and this <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=phsalvisberg.islandsql\">VS Code extension<\/a> uses the IslandSQL library to find text in DML statements and report syntax errors.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Token Channels<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ANTLR uses the concept of channels which is based on the idea of radio frequencies. The lexer is responsible for identifying tokens and putting them on the right channel. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For most lexers, these two channels are enough:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>DEFAULT_CHANNEL<\/code> &#8211; all tokens that are relevant to the parser<\/li>\n\n\n\n<li><code>HIDDEN_CHANNEL<\/code> &#8211; all other tokens<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an example:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">1) Tokens in source, on hidden channel and on default channel<\/span><span role=\"button\" tabindex=\"0\" data-code=\"select\u2588\/*+ full(emp) *\/\u2588*\u2588from\u2588emp\u2588where\u2588empno\u2588=\u25887788\u2588;\n      \u2588\/*+ full(emp) *\/\u2588 \u2588    \u2588   \u2588     \u2588     \u2588 \u2588    \u2588\nselect                  * from emp where empno = 7788 ;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\">\u2588<\/span><span style=\"color: #6A9955\">\/*+ full(emp) *\/<\/span><span style=\"color: #D4D4D4\">\u2588*\u2588<\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\">\u2588emp\u2588<\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\">\u2588empno\u2588=\u2588<\/span><span style=\"color: #B5CEA8\">7788<\/span><span style=\"color: #D4D4D4\">\u2588;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      \u2588<\/span><span style=\"color: #6A9955\">\/*+ full(emp) *\/<\/span><span style=\"color: #D4D4D4\">\u2588 \u2588    \u2588   \u2588     \u2588     \u2588 \u2588    \u2588<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\">                  * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> empno = <\/span><span style=\"color: #B5CEA8\">7788<\/span><span style=\"color: #D4D4D4\"> ;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The first line contains the complete statement where a space token is represented as <code>\u2588<\/code> . The syntax highlighting helps to identify the 19 tokens. In the second line, you find all 10 hidden tokens &#8211; comments and whitespace. The noise, so to speak. And in the third line are the visible 9 tokens on the default channel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is similar to a noise-cancelling system. The parser only gets the tokens that are necessary to do its job.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hints\">Identifying Hints<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In <a href=\"https:\/\/www.salvis.com\/blog\/2020\/09\/07\/highlight-hints-in-sql-developer\/\">this blog post<\/a>, I explained how you can distinguish hints from ordinary comments and highlight them in SQL Developer. Solving this problem was a bit more complicated because SQL Developer&#8217;s parse tree does not contain hints. Because hints are just special comments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, in the IslandSQL grammar, we want to define hints as part of a <a href=\"https:\/\/islandsql.github.io\/IslandSQL\/grammar.xhtml#queryBlock\">query_block<\/a>. In other words, we want to make them visible.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/query_block.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/query_block.svg\" alt=\"query_block in IslandSQL with highlighted hint\" class=\"wp-image-13125\"\/><\/a><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">In the Lexer?<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Identifying hints in the lexer and putting them on the <code>DEFAULT_CHANNEL<\/code> sounds like a good solution. However, we do not want to handle comment tokens that look like a hint in every position in the parser. This would be a nightmare.  To avoid that we could add a semantic predicate to consider only hint-style comments following the <code>select<\/code> keyword. Of course, we need to ignore whitespace and ordinary comments. Furthermore, we have to ensure that the <code>select<\/code> keyword is the start of a <code>query_block<\/code> and not used in another context such as a <code>grant<\/code> statement. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At that point, it becomes obvious that the lexer would be doing the job of the parser.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Better in the Parser!<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">We better use the lexer only to identify hint tokens and put them on the <code>HIDDEN_CHANNEL<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:39;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">2) Excerpt IslandSqlLexer.g4 v0.5.0<\/span><span role=\"button\" tabindex=\"0\" data-code=\"ML_HINT: '\/*+' .*? '*\/' -&gt; channel(HIDDEN);\nML_COMMENT: '\/*' .*? '*\/' -&gt; channel(HIDDEN);\nSL_HINT: '--+' ~[\\r\\n]* -&gt; channel(HIDDEN);\nSL_COMMENT: '--' ~[\\r\\n]* -&gt; channel(HIDDEN);\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line cbp-line-highlight\"><span style=\"color: #DCDCAA\">ML_HINT:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;\/*+&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">.<\/span><span style=\"color: #569CD6\">*<\/span><span style=\"color: #CE9178\">?<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;*\/&#39;<\/span><span style=\"color: #D4D4D4\"> -&gt; <\/span><span style=\"color: #CE9178\">channel<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">HIDDEN<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">ML_COMMENT:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;\/*&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">.<\/span><span style=\"color: #569CD6\">*<\/span><span style=\"color: #CE9178\">?<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;*\/&#39;<\/span><span style=\"color: #D4D4D4\"> -&gt; <\/span><span style=\"color: #CE9178\">channel<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">HIDDEN<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #DCDCAA\">SL_HINT:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;--+&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">~[<\/span><span style=\"color: #D7BA7D\">\\r\\n<\/span><span style=\"color: #CE9178\">]<\/span><span style=\"color: #569CD6\">*<\/span><span style=\"color: #D4D4D4\"> -&gt; <\/span><span style=\"color: #CE9178\">channel<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">HIDDEN<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">SL_COMMENT:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;--&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">~[<\/span><span style=\"color: #D7BA7D\">\\r\\n<\/span><span style=\"color: #CE9178\">]<\/span><span style=\"color: #569CD6\">*<\/span><span style=\"color: #D4D4D4\"> -&gt; <\/span><span style=\"color: #CE9178\">channel<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">HIDDEN<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">And then we define a semantic predicate in the parser:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:160;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">3) Excerpt IslandSqlParser.g4 v0.5.0<\/span><span role=\"button\" tabindex=\"0\" data-code=\"queryBlock:\n    {unhideFirstHint();} K_SELECT hint?\n    queryBlockSetOperator?\n    selectList\n    (intoClause | bulkCollectIntoClause)? \/\/ in PL\/SQL only\n    fromClause? \/\/ starting with Oracle Database 23c the from clause is optional\n    whereClause?\n    hierarchicalQueryClause?\n    groupByClause?\n    modelClause?\n    windowClause?\n;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C8C8C8\">queryBlock<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">    {<\/span><span style=\"color: #DCDCAA\">unhideFirstHint<\/span><span style=\"color: #D4D4D4\">();} <\/span><span style=\"color: #4FC1FF\">K_SELECT<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">hint<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">queryBlockSetOperator<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    (<\/span><span style=\"color: #9CDCFE\">intoClause<\/span><span style=\"color: #D4D4D4\"> | <\/span><span style=\"color: #9CDCFE\">bulkCollectIntoClause<\/span><span style=\"color: #D4D4D4\">)? <\/span><span style=\"color: #6A9955\">\/\/ in PL\/SQL only<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">fromClause<\/span><span style=\"color: #D4D4D4\">? <\/span><span style=\"color: #6A9955\">\/\/ starting with Oracle Database 23c the from clause is optional<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">whereClause<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">hierarchicalQueryClause<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">groupByClause<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">modelClause<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">windowClause<\/span><span style=\"color: #D4D4D4\">?<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s the call of the function <code>unhideFirstHint();}<\/code> on line 161. At that point, the parser is at the position of the token <code>K_SELECT<\/code>. Here&#8217;s the implementation in the base class of the generated parser:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:49;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">4) Excerpt IslandSqlParserBase.java v0.5.0<\/span><span role=\"button\" tabindex=\"0\" data-code=\"    public void unhideFirstHint() {\n        CommonTokenStream input = ((CommonTokenStream) this.getTokenStream());\n        List&lt;Token&gt; tokens = input.getHiddenTokensToRight(input.index());\n        if (tokens != null) {\n            for (Token token : tokens) {\n                if (token.getType() == IslandSqlLexer.ML_HINT || token.getType() == IslandSqlLexer.SL_HINT) {\n                    ((CommonToken) token).setChannel(Token.DEFAULT_CHANNEL);\n                    return; \/\/ stop after first hint style comment\n                }\n            }\n        }\n    }\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">public<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">unhideFirstHint<\/span><span style=\"color: #D4D4D4\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #9CDCFE\">CommonTokenStream<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">input<\/span><span style=\"color: #D4D4D4\"> = ((<\/span><span style=\"color: #9CDCFE\">CommonTokenStream<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">this<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getTokenStream<\/span><span style=\"color: #D4D4D4\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #9CDCFE\">List<\/span><span style=\"color: #D4D4D4\">&lt;<\/span><span style=\"color: #9CDCFE\">Token<\/span><span style=\"color: #D4D4D4\">&gt; <\/span><span style=\"color: #9CDCFE\">tokens<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">input<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getHiddenTokensToRight<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">input<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">index<\/span><span style=\"color: #D4D4D4\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">tokens<\/span><span style=\"color: #D4D4D4\"> != <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">Token<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">token<\/span><span style=\"color: #D4D4D4\"> : <\/span><span style=\"color: #9CDCFE\">tokens<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">token<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getType<\/span><span style=\"color: #D4D4D4\">() == <\/span><span style=\"color: #9CDCFE\">IslandSqlLexer<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">ML_HINT<\/span><span style=\"color: #D4D4D4\"> || <\/span><span style=\"color: #9CDCFE\">token<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">getType<\/span><span style=\"color: #D4D4D4\">() == <\/span><span style=\"color: #9CDCFE\">IslandSqlLexer<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">SL_HINT<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ((<\/span><span style=\"color: #9CDCFE\">CommonToken<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #9CDCFE\">token<\/span><span style=\"color: #D4D4D4\">).<\/span><span style=\"color: #DCDCAA\">setChannel<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">Token<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">DEFAULT_CHANNEL<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\">; <\/span><span style=\"color: #6A9955\">\/\/ stop after first hint style comment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We scan all hidden tokens to the right of the keyword <code>select<\/code> and set the first hint token to the <code>DEFAULT_CHANNEL<\/code> to make it visible to the parser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"parse-tree\">Parse Tree<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s visualise the parse tree of the following query:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">5a) Example with comments and hints<\/span><span role=\"button\" tabindex=\"0\" data-code=\"select -- A query_block can have only one comment\n      \/*  containing hints, and that comment must\n          follow the SELECT keyword. *\/\n      \/*+ full(emp) *\/\n      --+ index(emp)\n      ename, sal    -- select_list\n from emp           -- from_clause\nwhere empno = 7788; -- where_clause\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #6A9955\">-- A query_block can have only one comment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">\/*  containing hints, and that comment must<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">          follow the SELECT keyword. *\/<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">\/*+ full(emp) *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #6A9955\">--+ index(emp)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      ename, sal    <\/span><span style=\"color: #6A9955\">-- select_list<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp           <\/span><span style=\"color: #6A9955\">-- from_clause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> empno = <\/span><span style=\"color: #B5CEA8\">7788<\/span><span style=\"color: #D4D4D4\">; <\/span><span style=\"color: #6A9955\">-- where_clause<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We use <code><a href=\"https:\/\/github.com\/IslandSQL\/IslandSQL\/blob\/v0.5.0\/src\/main\/java\/ch\/islandsql\/grammar\/util\/ParseTreeUtil.java#L253\">ParseTreeUtil.dotParseTree<\/a><\/code> to produce an output in <a href=\"https:\/\/en.wikipedia.org\/wiki\/DOT_(graph_description_language)\">DOT<\/a> format and paste the result into the web UI of <a href=\"https:\/\/edotor.net\/\">Edotor<\/a> or any other <a href=\"https:\/\/graphviz.org\/resources\/#graphical-interfaces\">Graphviz viewer<\/a> to produce this result:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/hint.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/hint.svg\" alt=\"parse tree with hint\" class=\"wp-image-13075\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The leave nodes are sand-coloured rectangles. They represent the visible lexer tokens, the ones on the <code>DEFAULT_CHANNEL<\/code>. All other nodes are sky blue and elliptical. They represent a rule in the parser grammar. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have changed the colour of the <code>hint<\/code> node to red so that you can spot it more easily. You see that it contains the <code>\/*+ full(emp) *\/<\/code> hint-style comment.  All other comments are not visible in the parse tree. That&#8217;s what we wanted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an alternative textual representation of the parse tree using <code><a href=\"https:\/\/github.com\/IslandSQL\/IslandSQL\/blob\/v0.5.0\/src\/main\/java\/ch\/islandsql\/grammar\/util\/ParseTreeUtil.java#L240\">ParseTreeUtil.printParseTree<\/a><\/code>. It is better suited to represent larger parse trees. Furthermore, it contains also the symbol name of lexer tokens, for example <code>K_SELECT<\/code> or <code>ML_HINT<\/code> as you see in lines 7 and 9.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">5b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          queryBlock\n            K_SELECT:select\n            hint\n              ML_HINT:\/*+ full(emp) *\/\n            selectList\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:ename\n              COMMA:,\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:sal\n            fromClause\n              K_FROM:from\n              fromItem:tableReferenceFromItem\n                tableReference\n                  queryTableExpression\n                    sqlName\n                      unquotedId\n                        ID:emp\n            whereClause\n              K_WHERE:where\n              condition\n                expression:simpleComparisionCondition\n                  expression:simpleExpressionName\n                    sqlName\n                      unquotedId\n                        ID:empno\n                  simpleComparisionOperator:eq\n                    EQUALS:=\n                  expression:simpleExpressionNumberLiteral\n                    NUMBER:7788\n      sqlEnd\n        SEMI:;\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            hint<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">              ML_HINT:\/*+ full(emp) *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:ename<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:sal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        ID:emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            whereClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              K_WHERE:where<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleComparisionCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        ID:empno<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  simpleComparisionOperator:eq<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    EQUALS:=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    NUMBER:7788<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"new_features_in_the_oracle_database_23c\">New Features in the Oracle Database 23c<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Oracle Database 23c comes with a lot of new features. See the <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/nfcoa\/\">new features guide<\/a> for a complete list.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the next chapters, we look at a few examples that are relevant when querying data. In other words, at some of the new features that are applicable in the <code>select<\/code> statement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"graph-table-operator\">Graph Table Operator<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can use the new <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/graph_table-operator.html#GUID-CA6A600E-2087-46F8-A081-C6F3F01CF305\">graph_table<\/a><\/code> operator to query property graphs in the Oracle Database. It&#8217;s a table function similar to <code>xml_table<\/code> or <code>json_table<\/code>. A powerful addition to the converged database.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"setup\">Setup<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/graph_table-operator.html#GUID-CA6A600E-2087-46F8-A081-C6F3F01CF305__GUID-09D21458-518A-4220-B524-389E0A63AEE5\">SQL Language Reference 23<\/a> provides some good examples including a setup script. <\/p>\n\n\n<div class=\"accordion\"><div class=\"mfn-acc accordion_wrapper  toggle\"><br \/>\n<div class=\"question\"><div class=\"title\"><i class=\"icon-plus acc-icon-plus\" aria-hidden=\"true\"><\/i><i class=\"icon-minus acc-icon-minus\" aria-hidden=\"true\"><\/i>6) Setup example property graph<\/div><div class=\"answer\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The setup script is provided here for convenience. It&#8217;s a 1:1 copy from the SQL Language Reference with some minor additions and modifications. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most important change is that business keys are used in the insert statements to retrieve the associated surrogate keys. As a result, it&#8217;s easier to add test data.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">6) Setup example property graph<\/span><span role=\"button\" tabindex=\"0\" data-code=\"-- drop existing property graph including data\ndrop property graph if exists students_graph;\ndrop table if exists friendships;\ndrop table if exists students;\ndrop table if exists persons;\ndrop table if exists university;\n\n-- create tables, insert data and create property graph\ncreate table university (\n   id             number       generated always as identity (start with 1 increment by 1) not null,\n   name           varchar2(10) not null,\n   constraint u_pk primary key (id),\n   constraint u_uk unique (name)\n);\ninsert into university (name) values ('ABC'), ('XYZ');\n\ncreate table persons (\n   person_id      number       generated always as identity (start with 1 increment by 1) not null,\n   name           varchar2(10) not null,\n   birthdate      date         not null,\n   height         float        not null,\n   person_data    json         not null,\n   constraint person_pk primary key (person_id),\n   constraint person_uk unique (name)\n);\ninsert into persons (name, height, birthdate, person_data)\nvalues ('John',  1.80, date '1963-06-13', '{&quot;department&quot;:&quot;IT&quot;,&quot;role&quot;:&quot;Software Developer&quot;}'),\n       ('Mary',  1.65, date '1982-09-25', '{&quot;department&quot;:&quot;HR&quot;,&quot;role&quot;:&quot;HR Manager&quot;}'),\n       ('Bob',   1.75, date '1966-03-11', '{&quot;department&quot;:&quot;IT&quot;,&quot;role&quot;:&quot;Technical Consultant&quot;}'),\n       ('Alice', 1.70, date '1987-02-01', '{&quot;department&quot;:&quot;HR&quot;,&quot;role&quot;:&quot;HR Assistant&quot;}');\n\ncreate table students (\n   s_id           number       generated always as identity (start with 1 increment by 1) not null,\n   s_univ_id      number       not null,\n   s_person_id    number       not null,\n   subject        varchar2(10) not null,\n   constraint stud_pk primary key (s_id),\n   constraint stud_uk unique (s_univ_id, s_person_id),\n   constraint stud_fk_person foreign key (s_person_id) references persons(person_id),\n   constraint stud_fk_univ foreign key (s_univ_id) references university(id)\n);\ninsert into students(s_univ_id, s_person_id, subject)\nselect u.id, p.person_id, d.subject\n  from (values\n          (1, 'ABC', 'John',  'Arts'),\n          (2, 'ABC', 'Bob',   'Music'),\n          (3, 'XYZ', 'Mary',  'Math'),\n          (4, 'XYZ', 'Alice', 'Science')\n       ) as d (seq, uni_name, pers_name, subject)\n  join university u\n    on u.name = d.uni_name\n  join persons p\n    on p.name = d.pers_name\n order by d.seq;\n\ncreate table friendships (\n   friendship_id  number       generated always as identity (start with 1 increment by 1) not null,\n   person_a       number       not null,\n   person_b       number       not null,\n   meeting_date   date         not null,\n   constraint fk_person_a_id foreign key (person_a) references persons(person_id),\n   constraint fk_person_b_id foreign key (person_b) references persons(person_id),\n   constraint fs_pk primary key (friendship_id),\n   constraint fs_uk unique (person_a, person_b)\n);\ninsert into friendships (person_a, person_b, meeting_date)\nselect a.person_id, b.person_id, d.meeting_date\n  from (values\n          (1, 'John', 'Bob',   date '2000-09-01'),\n          (2, 'Mary', 'Alice', date '2000-09-19'),\n          (3, 'Mary', 'John',  date '2000-09-19'),\n          (4, 'Bob',  'Mary',  date '2001-07-10')\n       ) as d (seq, name_a, name_b, meeting_date)\n  join persons a\n    on a.name = d.name_a\n  join persons b\n    on b.name = d.name_b\n  order by d.seq;\n                \ncreate property graph students_graph\n   vertex tables (\n      persons key (person_id)\n         label person\n            properties (person_id, name, birthdate as dob)\n         label person_ht\n            properties (height),\n      university key (id)\n   )\n   edge tables (\n      friendships as friends\n         key (friendship_id)\n         source key (person_a) references persons(person_id)\n         destination key (person_b) references persons(person_id)\n         properties (friendship_id, meeting_date),\n      students as student_of\n         source key (s_person_id) references persons(person_id)\n         destination key (s_univ_id) references university(id)\n         properties (subject)\n  );\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">-- drop existing property graph including data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> property graph <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> students_graph;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> friendships;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> students;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> persons;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> university;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">-- create tables, insert data and create property graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> university (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   id             <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       generated always <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> identity (<\/span><span style=\"color: #569CD6\">start with<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">increment by<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> u_pk <\/span><span style=\"color: #569CD6\">primary key<\/span><span style=\"color: #D4D4D4\"> (id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> u_uk <\/span><span style=\"color: #569CD6\">unique<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> university (<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #CE9178\">&#39;ABC&#39;<\/span><span style=\"color: #D4D4D4\">), (<\/span><span style=\"color: #CE9178\">&#39;XYZ&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> persons (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   person_id      <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       generated always <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> identity (<\/span><span style=\"color: #569CD6\">start with<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">increment by<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   birthdate      <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   height         <\/span><span style=\"color: #569CD6\">float<\/span><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   person_data    json         <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> person_pk <\/span><span style=\"color: #569CD6\">primary key<\/span><span style=\"color: #D4D4D4\"> (person_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> person_uk <\/span><span style=\"color: #569CD6\">unique<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> persons (<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, height, birthdate, person_data)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #CE9178\">&#39;John&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #B5CEA8\">1.80<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;1963-06-13&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;{&quot;department&quot;:&quot;IT&quot;,&quot;role&quot;:&quot;Software Developer&quot;}&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #CE9178\">&#39;Mary&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #B5CEA8\">1.65<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;1982-09-25&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;{&quot;department&quot;:&quot;HR&quot;,&quot;role&quot;:&quot;HR Manager&quot;}&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #CE9178\">&#39;Bob&#39;<\/span><span style=\"color: #D4D4D4\">,   <\/span><span style=\"color: #B5CEA8\">1.75<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;1966-03-11&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;{&quot;department&quot;:&quot;IT&quot;,&quot;role&quot;:&quot;Technical Consultant&quot;}&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #CE9178\">&#39;Alice&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">1.70<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;1987-02-01&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;{&quot;department&quot;:&quot;HR&quot;,&quot;role&quot;:&quot;HR Assistant&quot;}&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> students (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   s_id           <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       generated always <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> identity (<\/span><span style=\"color: #569CD6\">start with<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">increment by<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   s_univ_id      <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   s_person_id    <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   subject        <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> stud_pk <\/span><span style=\"color: #569CD6\">primary key<\/span><span style=\"color: #D4D4D4\"> (s_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> stud_uk <\/span><span style=\"color: #569CD6\">unique<\/span><span style=\"color: #D4D4D4\"> (s_univ_id, s_person_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> stud_fk_person <\/span><span style=\"color: #569CD6\">foreign key<\/span><span style=\"color: #D4D4D4\"> (s_person_id) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> persons(person_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> stud_fk_univ <\/span><span style=\"color: #569CD6\">foreign key<\/span><span style=\"color: #D4D4D4\"> (s_univ_id) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> university(id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> students(s_univ_id, s_person_id, subject)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> u.id, p.person_id, d.subject<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;ABC&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;John&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #CE9178\">&#39;Arts&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;ABC&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Bob&#39;<\/span><span style=\"color: #D4D4D4\">,   <\/span><span style=\"color: #CE9178\">&#39;Music&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;XYZ&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Mary&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #CE9178\">&#39;Math&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;XYZ&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Alice&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Science&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       ) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> d (seq, uni_name, pers_name, subject)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> university u<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> u.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> = d.uni_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> persons p<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> p.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> = d.pers_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">order by<\/span><span style=\"color: #D4D4D4\"> d.seq;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> friendships (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   friendship_id  <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       generated always <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> identity (<\/span><span style=\"color: #569CD6\">start with<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">increment by<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   person_a       <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   person_b       <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   meeting_date   <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> fk_person_a_id <\/span><span style=\"color: #569CD6\">foreign key<\/span><span style=\"color: #D4D4D4\"> (person_a) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> persons(person_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> fk_person_b_id <\/span><span style=\"color: #569CD6\">foreign key<\/span><span style=\"color: #D4D4D4\"> (person_b) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> persons(person_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> fs_pk <\/span><span style=\"color: #569CD6\">primary key<\/span><span style=\"color: #D4D4D4\"> (friendship_id),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">constraint<\/span><span style=\"color: #D4D4D4\"> fs_uk <\/span><span style=\"color: #569CD6\">unique<\/span><span style=\"color: #D4D4D4\"> (person_a, person_b)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> friendships (person_a, person_b, meeting_date)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> a.person_id, b.person_id, d.meeting_date<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;John&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Bob&#39;<\/span><span style=\"color: #D4D4D4\">,   <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;2000-09-01&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Mary&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Alice&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;2000-09-19&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Mary&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;John&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;2000-09-19&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          (<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Bob&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #CE9178\">&#39;Mary&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #569CD6\">date<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;2001-07-10&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       ) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> d (seq, name_a, name_b, meeting_date)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> persons a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> a.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> = d.name_a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> persons b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> b.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> = d.name_b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">order by<\/span><span style=\"color: #D4D4D4\"> d.seq;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> property graph students_graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   vertex tables (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      persons key (person_id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         label person<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            properties (person_id, <\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\">, birthdate <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> dob)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         label person_ht<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            properties (height),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      university key (id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   edge tables (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      friendships <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> friends<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         key (friendship_id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         source key (person_a) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> persons(person_id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         destination key (person_b) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> persons(person_id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         properties (friendship_id, meeting_date),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      students <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> student_of<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         source key (s_person_id) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> persons(person_id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         destination key (s_univ_id) <\/span><span style=\"color: #569CD6\">references<\/span><span style=\"color: #D4D4D4\"> university(id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         properties (subject)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  );<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><\/div>\n<br \/>\n<\/div><\/div>\n\n\n\n\n<p class=\"wp-block-paragraph\">The example property graph looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"479\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph-1024x479.png\" alt=\"Data in STUDENTS_GRAPH\" class=\"wp-image-13086\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph-1024x479.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph-300x140.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph-768x359.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph-150x70.png 150w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph-480x224.png 480w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/students_graph.png 1431w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Source: <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/graph_table-operator.html#GUID-CA6A600E-2087-46F8-A081-C6F3F01CF305__FIG_NC2_YFJ_JXB\">SQL Language Reference 23c<\/a><\/figcaption><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">Query<\/h5>\n\n\n<div class=\"jq-tabs tabs_wrapper tabs_horizontal\"><ul><li><a href=\"#tab-6a3a4bfb22570-1\">Query<\/a><\/li><li><a href=\"#tab-6a3a4bfb22570-2\">Parse tree<\/a><\/li><li><a href=\"#tab-6a3a4bfb22570-3\">Parse tree (graph)<\/a><\/li><\/ul><div id=\"tab-6a3a4bfb22570-1\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7a) Query using graph_table<\/span><span role=\"button\" tabindex=\"0\" data-code=\"select a_name, b_name, c_name\n  from graph_table (\n          students_graph\n          match\n             (a is person)\n                -&#091;is friends&#093;-&gt;    -- a is friend of b\n             (b is person)\n                -&#091;is friends&#093;-&gt;    -- b is friend of c\n             (c is person)\n                -&#091;is friends&#093;-&gt;    -- c is friend of a (cyclic path)\n             (a)\n          where\n             a.name = 'Mary'       -- start of cyclic path with 3 nodes\n          columns (\n             a.name as a_name,\n             b.name as b_name,\n             c.name as c_name\n          )\n       ) g;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> a_name, b_name, c_name<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> graph_table (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          students_graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          match<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             (a <\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> person)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                -[<\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> friends]-&gt;    <\/span><span style=\"color: #6A9955\">-- a is friend of b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             (b <\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> person)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                -[<\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> friends]-&gt;    <\/span><span style=\"color: #6A9955\">-- b is friend of c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             (<\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> person)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                -[<\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> friends]-&gt;    <\/span><span style=\"color: #6A9955\">-- c is friend of a (cyclic path)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             (a)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">where<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             a.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&#39;Mary&#39;<\/span><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #6A9955\">-- start of cyclic path with 3 nodes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          columns (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             a.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> a_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             b.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> b_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #569CD6\">name<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> c_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       ) g;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"A_NAME     B_NAME     C_NAME    \n---------- ---------- ----------\nMary       John       Bob       \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">A_NAME     B_NAME     C_NAME    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Mary       John       Bob       <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">Edges and Directions<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">An edge has a source and a destination vertex. According to the model, Mary is a friend of John and this means that John is also a friend of Mary. When we change the direction of the edges in the query from <code>-[is friends]-&gt;<\/code> to <code>&lt;-[is friends]-<\/code> the query result changes to:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"A_NAME     B_NAME     C_NAME    \n---------- ---------- ----------\nMary       Bob        John      \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">A_NAME     B_NAME     C_NAME    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Mary       Bob        John      <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ve got now the clockwise result of the cyclic path starting with Mary (see the highlighted person vertices in the STUDENTS_GRAPH figure above).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since there is only one type of edge between the vertices of the type <code>persons<\/code> we get the same result by using just <code>&lt;-[]-<\/code> or even <code>&lt;-<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To ignore the direction of a friendship we can use <code>&lt;-[is friends]-&gt;<\/code> or <code>-[is friends]-<\/code> or <code>&lt;-[]-&gt;<\/code> or <code>-[]-<\/code> or  <code>&lt;-&gt;<\/code> or just <code>-<\/code> to produce this result:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"A_NAME     B_NAME     C_NAME    \n---------- ---------- ----------\nMary       Bob        John      \nMary       John       Bob       \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">A_NAME     B_NAME     C_NAME    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Mary       Bob        John      <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Mary       John       Bob       <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">IMO this arrow-like syntax is intuitive and makes a <code>graph_table<\/code> query relatively easy to read and write.<\/p>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22570-2\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          queryBlock\n            K_SELECT:select\n            selectList\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:a_name\n              COMMA:,\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:b_name\n              COMMA:,\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:c_name\n            fromClause\n              K_FROM:from\n              fromItem:tableReferenceFromItem\n                tableReference\n                  queryTableExpression\n                    expression:specialFunctionExpressionParent\n                      specialFunctionExpression\n                        graphTable\n                          K_GRAPH_TABLE:graph_table\n                          LPAR:(\n                          sqlName\n                            unquotedId\n                              ID:students_graph\n                          K_MATCH:match\n                          pathTerm\n                            pathTerm\n                              pathTerm\n                                pathTerm\n                                  pathTerm\n                                    pathTerm\n                                      pathTerm\n                                        pathFactor\n                                          pathPrimary\n                                            elementPattern\n                                              vertexPattern\n                                                LPAR:(\n                                                elementPatternFiller\n                                                  sqlName\n                                                    unquotedId\n                                                      keywordAsId\n                                                        K_A:a\n                                                  K_IS:is\n                                                  labelExpression\n                                                    sqlName\n                                                      unquotedId\n                                                        ID:person\n                                                RPAR:)\n                                      pathFactor\n                                        pathPrimary\n                                          elementPattern\n                                            edgePattern\n                                              fullEdgePattern\n                                                fullEdgePointingRight\n                                                  MINUS:-\n                                                  LSQB:&#091;\n                                                  elementPatternFiller\n                                                    K_IS:is\n                                                    labelExpression\n                                                      sqlName\n                                                        unquotedId\n                                                          ID:friends\n                                                  RSQB:&#093;\n                                                  MINUS:-\n                                                  GT:&gt;\n                                    pathFactor\n                                      pathPrimary\n                                        elementPattern\n                                          vertexPattern\n                                            LPAR:(\n                                            elementPatternFiller\n                                              sqlName\n                                                unquotedId\n                                                  ID:b\n                                              K_IS:is\n                                              labelExpression\n                                                sqlName\n                                                  unquotedId\n                                                    ID:person\n                                            RPAR:)\n                                  pathFactor\n                                    pathPrimary\n                                      elementPattern\n                                        edgePattern\n                                          fullEdgePattern\n                                            fullEdgePointingRight\n                                              MINUS:-\n                                              LSQB:&#091;\n                                              elementPatternFiller\n                                                K_IS:is\n                                                labelExpression\n                                                  sqlName\n                                                    unquotedId\n                                                      ID:friends\n                                              RSQB:&#093;\n                                              MINUS:-\n                                              GT:&gt;\n                                pathFactor\n                                  pathPrimary\n                                    elementPattern\n                                      vertexPattern\n                                        LPAR:(\n                                        elementPatternFiller\n                                          sqlName\n                                            unquotedId\n                                              ID:c\n                                          K_IS:is\n                                          labelExpression\n                                            sqlName\n                                              unquotedId\n                                                ID:person\n                                        RPAR:)\n                              pathFactor\n                                pathPrimary\n                                  elementPattern\n                                    edgePattern\n                                      fullEdgePattern\n                                        fullEdgePointingRight\n                                          MINUS:-\n                                          LSQB:&#091;\n                                          elementPatternFiller\n                                            K_IS:is\n                                            labelExpression\n                                              sqlName\n                                                unquotedId\n                                                  ID:friends\n                                          RSQB:&#093;\n                                          MINUS:-\n                                          GT:&gt;\n                            pathFactor\n                              pathPrimary\n                                elementPattern\n                                  vertexPattern\n                                    LPAR:(\n                                    elementPatternFiller\n                                      sqlName\n                                        unquotedId\n                                          keywordAsId\n                                            K_A:a\n                                    RPAR:)\n                          K_WHERE:where\n                          condition\n                            expression:simpleComparisionCondition\n                              expression:binaryExpression\n                                expression:simpleExpressionName\n                                  sqlName\n                                    unquotedId\n                                      keywordAsId\n                                        K_A:a\n                                PERIOD:.\n                                expression:simpleExpressionName\n                                  sqlName\n                                    unquotedId\n                                      keywordAsId\n                                        K_NAME:name\n                              simpleComparisionOperator:eq\n                                EQUALS:=\n                              expression:simpleExpressionStringLiteral\n                                STRING:'Mary'\n                          K_COLUMNS:columns\n                          LPAR:(\n                          graphTableColumnDefinition\n                            expression:binaryExpression\n                              expression:simpleExpressionName\n                                sqlName\n                                  unquotedId\n                                    keywordAsId\n                                      K_A:a\n                              PERIOD:.\n                              expression:simpleExpressionName\n                                sqlName\n                                  unquotedId\n                                    keywordAsId\n                                      K_NAME:name\n                            K_AS:as\n                            sqlName\n                              unquotedId\n                                ID:a_name\n                          COMMA:,\n                          graphTableColumnDefinition\n                            expression:binaryExpression\n                              expression:simpleExpressionName\n                                sqlName\n                                  unquotedId\n                                    ID:b\n                              PERIOD:.\n                              expression:simpleExpressionName\n                                sqlName\n                                  unquotedId\n                                    keywordAsId\n                                      K_NAME:name\n                            K_AS:as\n                            sqlName\n                              unquotedId\n                                ID:b_name\n                          COMMA:,\n                          graphTableColumnDefinition\n                            expression:binaryExpression\n                              expression:simpleExpressionName\n                                sqlName\n                                  unquotedId\n                                    ID:c\n                              PERIOD:.\n                              expression:simpleExpressionName\n                                sqlName\n                                  unquotedId\n                                    keywordAsId\n                                      K_NAME:name\n                            K_AS:as\n                            sqlName\n                              unquotedId\n                                ID:c_name\n                          RPAR:)\n                          RPAR:)\n                  sqlName\n                    unquotedId\n                      ID:g\n      sqlEnd\n        SEMI:;\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:a_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:b_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:c_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      specialFunctionExpression<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                        graphTable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          K_GRAPH_TABLE:graph_table<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              ID:students_graph<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          K_MATCH:match<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      pathTerm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              vertexPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                      keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                        K_A:a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  labelExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                        ID:person<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            edgePattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              fullEdgePattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                fullEdgePointingRight<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  MINUS:-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  LSQB:[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    labelExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                      sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                        unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                          ID:friends<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  RSQB:]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  MINUS:-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  GT:&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          vertexPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  ID:b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              labelExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    ID:person<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        edgePattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          fullEdgePattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            fullEdgePointingRight<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              MINUS:-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              LSQB:[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                labelExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                      ID:friends<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              RSQB:]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              MINUS:-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              GT:&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      vertexPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              ID:c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          labelExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                ID:person<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    edgePattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      fullEdgePattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        fullEdgePointingRight<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          MINUS:-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          LSQB:[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            labelExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  ID:friends<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          RSQB:]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          MINUS:-<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          GT:&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            pathFactor<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              pathPrimary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                elementPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  vertexPattern<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    elementPatternFiller<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            K_A:a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          K_WHERE:where<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleComparisionCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:binaryExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        K_A:a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                PERIOD:.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        K_NAME:name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              simpleComparisionOperator:eq<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                EQUALS:=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                STRING:&#39;Mary&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          K_COLUMNS:columns<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          graphTableColumnDefinition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:binaryExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      K_A:a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              PERIOD:.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      K_NAME:name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                ID:a_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          graphTableColumnDefinition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:binaryExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    ID:b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              PERIOD:.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      K_NAME:name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                ID:b_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          graphTableColumnDefinition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:binaryExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    ID:c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              PERIOD:.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      K_NAME:name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                ID:c_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:g<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22570-3\" ><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/graph_table-1.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/graph_table-1.svg\" alt=\"parse tree with graph_table\" class=\"wp-image-13131\"\/><\/a><\/figure>\n\n\n<p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"table_value_constructor\">Table Value Constructor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of reading rows from a table\/view, you can produce rows on the fly using the new <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__GUID-27159C8E-617B-4ECE-AA4C-1800287F0C9D\">values_clause<\/a><\/code>. This makes it possible to produce rows without writing a <code>query_block<\/code> for each row and using <code>union all<\/code> as a kind of row separator.<\/p>\n\n\n<div class=\"jq-tabs tabs_wrapper tabs_horizontal\"><ul><li><a href=\"#tab-6a3a4bfb2276c-1\">Query<\/a><\/li><li><a href=\"#tab-6a3a4bfb2276c-2\">Parse tree<\/a><\/li><li><a href=\"#tab-6a3a4bfb2276c-3\">Parse tree (graph)<\/a><\/li><\/ul><div id=\"tab-6a3a4bfb2276c-1\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">8a) Query using table value constructor<\/span><span role=\"button\" tabindex=\"0\" data-code=\"column english format a7\ncolumn german  format a7\nwith\n   eng (digit, english) as (values\n      (1, 'one'),\n      (2, 'two')\n   )\n select digit, english, german\n   from eng e\nnatural full join (values\n           (2, 'zwei'),\n           (3, 'drei')\n        ) as g (digit, german)\n  order by digit;\n\/\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">column<\/span><span style=\"color: #D4D4D4\"> english format a7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">column<\/span><span style=\"color: #D4D4D4\"> german  format a7<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">with<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   eng (digit, english) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;one&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;two&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> digit, english, german<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> eng e<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">natural<\/span><span style=\"color: #D4D4D4\"> full <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;zwei&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           (<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;drei&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> g (digit, german)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">order by<\/span><span style=\"color: #D4D4D4\"> digit;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"     DIGIT ENGLISH GERMAN \n---------- ------- -------\n         1 one            \n         2 two     zwei   \n         3         drei \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">     DIGIT ENGLISH GERMAN <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ------- -------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         1 one            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         2 two     zwei   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         3         drei <\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb2276c-2\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">8b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          withClause\n            K_WITH:with\n            factoringClause\n              subqueryFactoringClause\n                sqlName\n                  unquotedId\n                    ID:eng\n                LPAR:(\n                sqlName\n                  unquotedId\n                    ID:digit\n                COMMA:,\n                sqlName\n                  unquotedId\n                    ID:english\n                RPAR:)\n                K_AS:as\n                valuesClause\n                  LPAR:(\n                  K_VALUES:values\n                  valuesRow\n                    LPAR:(\n                    expression:simpleExpressionNumberLiteral\n                      NUMBER:1\n                    COMMA:,\n                    expression:simpleExpressionStringLiteral\n                      STRING:'one'\n                    RPAR:)\n                  COMMA:,\n                  valuesRow\n                    LPAR:(\n                    expression:simpleExpressionNumberLiteral\n                      NUMBER:2\n                    COMMA:,\n                    expression:simpleExpressionStringLiteral\n                      STRING:'two'\n                    RPAR:)\n                  RPAR:)\n          queryBlock\n            K_SELECT:select\n            selectList\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:digit\n              COMMA:,\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:english\n              COMMA:,\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:german\n            fromClause\n              K_FROM:from\n              fromItem:joinClause\n                fromItem:tableReferenceFromItem\n                  tableReference\n                    queryTableExpression\n                      sqlName\n                        unquotedId\n                          ID:eng\n                    sqlName\n                      unquotedId\n                        ID:e\n                joinVariant\n                  outerJoinClause\n                    K_NATURAL:natural\n                    outerJoinType\n                      K_FULL:full\n                    K_JOIN:join\n                    fromItem:tableReferenceFromItem\n                      tableReference\n                        queryTableExpression\n                          valuesClause\n                            LPAR:(\n                            K_VALUES:values\n                            valuesRow\n                              LPAR:(\n                              expression:simpleExpressionNumberLiteral\n                                NUMBER:2\n                              COMMA:,\n                              expression:simpleExpressionStringLiteral\n                                STRING:'zwei'\n                              RPAR:)\n                            COMMA:,\n                            valuesRow\n                              LPAR:(\n                              expression:simpleExpressionNumberLiteral\n                                NUMBER:3\n                              COMMA:,\n                              expression:simpleExpressionStringLiteral\n                                STRING:'drei'\n                              RPAR:)\n                            RPAR:)\n                            K_AS:as\n                            sqlName\n                              unquotedId\n                                ID:g\n                            LPAR:(\n                            sqlName\n                              unquotedId\n                                ID:digit\n                            COMMA:,\n                            sqlName\n                              unquotedId\n                                ID:german\n                            RPAR:)\n          orderByClause\n            K_ORDER:order\n            K_BY:by\n            orderByItem\n              expression:simpleExpressionName\n                sqlName\n                  unquotedId\n                    ID:digit\n      sqlEnd\n        SEMI:;\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          withClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_WITH:with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            factoringClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              subqueryFactoringClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:eng<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:digit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:english<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                valuesClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_VALUES:values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      NUMBER:1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      STRING:&#39;one&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      NUMBER:2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      STRING:&#39;two&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:digit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:english<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:german<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              fromItem:joinClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          ID:eng<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        ID:e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                joinVariant<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  outerJoinClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    K_NATURAL:natural<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    outerJoinType<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_FULL:full<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    K_JOIN:join<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        queryTableExpression<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                          valuesClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_VALUES:values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                NUMBER:2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                STRING:&#39;zwei&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                NUMBER:3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                STRING:&#39;drei&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                ID:g<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                ID:digit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                ID:german<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          orderByClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_ORDER:order<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_BY:by<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            orderByItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:digit<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb2276c-3\" ><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/values_clause-2.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/values_clause-2.svg\" alt=\"parse tree with values_clause\" class=\"wp-image-13138\"\/><\/a><\/figure>\n\n\n<p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">JSON_ARRAY Constructor by Query<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The function <code>json_array<\/code> has got a new <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_ARRAY.html#GUID-46CDB3AF-5795-455B-85A8-764528CEC43B__GUID-C7B4AB09-323E-467B-B56D-0028176016CD\">JSON_ARRAY_query_content<\/a><\/code> clause. This clause simplifies the creation of JSON documents, similar to SQL\/XML. If you use the abbreviated syntax for <code>json_array<\/code> and <code>json_object<\/code> it feels like writing JSON documents with embedded SQL.<\/p>\n\n\n<div class=\"jq-tabs tabs_wrapper tabs_horizontal\"><ul><li><a href=\"#tab-6a3a4bfb228fe-1\">Query<\/a><\/li><li><a href=\"#tab-6a3a4bfb228fe-2\">Parse tree<\/a><\/li><li><a href=\"#tab-6a3a4bfb228fe-3\">Parse tree (graph)<\/a><\/li><\/ul><div id=\"tab-6a3a4bfb228fe-1\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">9a) Query using JSON_ARRAY_query_contant clause<\/span><span role=\"button\" tabindex=\"0\" data-code=\"column result format a90\nselect json &#091;\n          select json {\n                    'ename': ename,\n                    'sal': sal,\n                    'comm': comm absent on null\n                 }\n            from emp\n           where sal &gt;= 3000\n          returning json\n       &#093; as result;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">column<\/span><span style=\"color: #D4D4D4\"> result format a90<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> json [<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> json {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #CE9178\">&#39;ename&#39;<\/span><span style=\"color: #D4D4D4\">: ename,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #CE9178\">&#39;sal&#39;<\/span><span style=\"color: #D4D4D4\">: sal,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #CE9178\">&#39;comm&#39;<\/span><span style=\"color: #D4D4D4\">: comm absent <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                 }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> sal &gt;= <\/span><span style=\"color: #B5CEA8\">3000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">returning<\/span><span style=\"color: #D4D4D4\"> json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       ] <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> result;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"RESULT                                                                                    \n------------------------------------------------------------------------------------------\n&#091;{&quot;ename&quot;:&quot;SCOTT&quot;,&quot;sal&quot;:3000},{&quot;ename&quot;:&quot;KING&quot;,&quot;sal&quot;:5000},{&quot;ename&quot;:&quot;FORD&quot;,&quot;sal&quot;:3000}&#093;     \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">RESULT                                                                                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">------------------------------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">[{&quot;ename&quot;:&quot;SCOTT&quot;,&quot;sal&quot;:3000},{&quot;ename&quot;:&quot;KING&quot;,&quot;sal&quot;:5000},{&quot;ename&quot;:&quot;FORD&quot;,&quot;sal&quot;:3000}]     <\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb228fe-2\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">9b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          queryBlock\n            K_SELECT:select\n            selectList\n              selectItem\n                expression:specialFunctionExpressionParent\n                  specialFunctionExpression\n                    jsonArray\n                      K_JSON:json\n                      LSQB:&#091;\n                      jsonArrayContent\n                        jsonArrayQueryContent\n                          subquery:subqueryQueryBlock\n                            queryBlock\n                              K_SELECT:select\n                              selectList\n                                selectItem\n                                  expression:specialFunctionExpressionParent\n                                    specialFunctionExpression\n                                      jsonObject\n                                        K_JSON:json\n                                        LCUB:{\n                                        jsonObjectContent\n                                          entry\n                                            regularEntry\n                                              expression:simpleExpressionStringLiteral\n                                                STRING:'ename'\n                                              COLON::\n                                              expression:simpleExpressionName\n                                                sqlName\n                                                  unquotedId\n                                                    ID:ename\n                                          COMMA:,\n                                          entry\n                                            regularEntry\n                                              expression:simpleExpressionStringLiteral\n                                                STRING:'sal'\n                                              COLON::\n                                              expression:simpleExpressionName\n                                                sqlName\n                                                  unquotedId\n                                                    ID:sal\n                                          COMMA:,\n                                          entry\n                                            regularEntry\n                                              expression:simpleExpressionStringLiteral\n                                                STRING:'comm'\n                                              COLON::\n                                              expression:simpleExpressionName\n                                                sqlName\n                                                  unquotedId\n                                                    ID:comm\n                                          jsonOnNullClause\n                                            K_ABSENT:absent\n                                            K_ON:on\n                                            K_NULL:null\n                                        RCUB:}\n                              fromClause\n                                K_FROM:from\n                                fromItem:tableReferenceFromItem\n                                  tableReference\n                                    queryTableExpression\n                                      sqlName\n                                        unquotedId\n                                          ID:emp\n                              whereClause\n                                K_WHERE:where\n                                condition\n                                  expression:simpleComparisionCondition\n                                    expression:simpleExpressionName\n                                      sqlName\n                                        unquotedId\n                                          ID:sal\n                                    simpleComparisionOperator:ge\n                                      GT:&gt;\n                                      EQUALS:=\n                                    expression:simpleExpressionNumberLiteral\n                                      NUMBER:3000\n                          jsonReturningClause\n                            K_RETURNING:returning\n                            K_JSON:json\n                      RSQB:&#093;\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:result\n      sqlEnd\n        SEMI:;\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    jsonArray<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      LSQB:[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      jsonArrayContent<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                        jsonArrayQueryContent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      jsonObject<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        LCUB:{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        jsonObjectContent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          entry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            regularEntry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                STRING:&#39;ename&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              COLON::<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    ID:ename<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          entry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            regularEntry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                STRING:&#39;sal&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              COLON::<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    ID:sal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          entry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            regularEntry<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                STRING:&#39;comm&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              COLON::<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                              expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                                    ID:comm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          jsonOnNullClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            K_ABSENT:absent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            K_ON:on<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                            K_NULL:null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        RCUB:}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          ID:emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              whereClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                K_WHERE:where<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  expression:simpleComparisionCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          ID:sal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    simpleComparisionOperator:ge<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      GT:&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      EQUALS:=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      NUMBER:3000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          jsonReturningClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_RETURNING:returning<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      RSQB:]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:result<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb228fe-3\" ><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/json_arra_query_content.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/json_arra_query_content.svg\" alt=\"parse tree with json_array_query_content\" class=\"wp-image-13115\"\/><\/a><\/figure>\n\n\n<p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">SQL Boolean Data Type<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Where can the new <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/Data-Types.html#GUID-285FFCA8-390D-4FA9-9A51-47B84EF5F83A\">Boolean data type<\/a> be used in the <code>select<\/code> statement? In conversion functions, for example.<\/p>\n\n\n<div class=\"jq-tabs tabs_wrapper tabs_horizontal\"><ul><li><a href=\"#tab-6a3a4bfb22ac9-1\">Query<\/a><\/li><li><a href=\"#tab-6a3a4bfb22ac9-2\">Parse tree<\/a><\/li><li><a href=\"#tab-6a3a4bfb22ac9-3\">Parse tree (graph)<\/a><\/li><\/ul><div id=\"tab-6a3a4bfb22ac9-1\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">10a) Query using Boolean data type<\/span><span role=\"button\" tabindex=\"0\" data-code=\"column dump_yes_value format a20\nselect cast('yes' as boolean) as yes_value,\n       xmlcast(xmltype('&lt;x&gt;no&lt;\/x&gt;') as boolean) as no_value,\n       validate_conversion('maybe' as boolean) as is_maybe_boolean,\n       dump(cast('yes' as boolean)) as dump_yes_value;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">column<\/span><span style=\"color: #D4D4D4\"> dump_yes_value format a20<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">cast<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;yes&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> yes_value,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #DCDCAA\">xmlcast<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #569CD6\">xmltype<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;&lt;x&gt;no&lt;\/x&gt;&#39;<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> no_value,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       validate_conversion(<\/span><span style=\"color: #CE9178\">&#39;maybe&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> is_maybe_boolean,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #DCDCAA\">dump<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">cast<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;yes&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\">)) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> dump_yes_value;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"YES_VALUE   NO_VALUE    IS_MAYBE_BOOLEAN DUMP_YES_VALUE\n----------- ----------- ---------------- --------------------\nTRUE        FALSE                      0 Typ=252 Len=1: 1\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">YES_VALUE   NO_VALUE    IS_MAYBE_BOOLEAN DUMP_YES_VALUE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------- ----------- ---------------- --------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">TRUE        FALSE                      0 Typ=252 Len=1: 1<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22ac9-2\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">10b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          queryBlock\n            K_SELECT:select\n            selectList\n              selectItem\n                expression:specialFunctionExpressionParent\n                  specialFunctionExpression\n                    cast\n                      K_CAST:cast\n                      LPAR:(\n                      expression:simpleExpressionStringLiteral\n                        STRING:'yes'\n                      K_AS:as\n                      dataType\n                        oracleBuiltInDatatype\n                          booleanDatatype\n                            K_BOOLEAN:boolean\n                      RPAR:)\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:yes_value\n              COMMA:,\n              selectItem\n                expression:specialFunctionExpressionParent\n                  specialFunctionExpression\n                    xmlcast\n                      K_XMLCAST:xmlcast\n                      LPAR:(\n                      expression:functionExpressionParent\n                        functionExpression\n                          sqlName\n                            unquotedId\n                              keywordAsId\n                                K_XMLTYPE:xmltype\n                          LPAR:(\n                          functionParameter\n                            condition\n                              expression:simpleExpressionStringLiteral\n                                STRING:'&lt;x&gt;no&lt;\/x&gt;'\n                          RPAR:)\n                      K_AS:as\n                      dataType\n                        oracleBuiltInDatatype\n                          booleanDatatype\n                            K_BOOLEAN:boolean\n                      RPAR:)\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:no_value\n              COMMA:,\n              selectItem\n                expression:specialFunctionExpressionParent\n                  specialFunctionExpression\n                    validateConversion\n                      K_VALIDATE_CONVERSION:validate_conversion\n                      LPAR:(\n                      expression:simpleExpressionStringLiteral\n                        STRING:'maybe'\n                      K_AS:as\n                      dataType\n                        oracleBuiltInDatatype\n                          booleanDatatype\n                            K_BOOLEAN:boolean\n                      RPAR:)\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:is_maybe_boolean\n              COMMA:,\n              selectItem\n                expression:functionExpressionParent\n                  functionExpression\n                    sqlName\n                      unquotedId\n                        ID:dump\n                    LPAR:(\n                    functionParameter\n                      condition\n                        expression:specialFunctionExpressionParent\n                          specialFunctionExpression\n                            cast\n                              K_CAST:cast\n                              LPAR:(\n                              expression:simpleExpressionStringLiteral\n                                STRING:'yes'\n                              K_AS:as\n                              dataType\n                                oracleBuiltInDatatype\n                                  booleanDatatype\n                                    K_BOOLEAN:boolean\n                              RPAR:)\n                    RPAR:)\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:dump_yes_value\n      sqlEnd\n        SEMI:;\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    cast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_CAST:cast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        STRING:&#39;yes&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      dataType<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        oracleBuiltInDatatype<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                          booleanDatatype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:yes_value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    xmlcast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_XMLCAST:xmlcast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                K_XMLTYPE:xmltype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                STRING:&#39;&lt;x&gt;no&lt;\/x&gt;&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      dataType<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        oracleBuiltInDatatype<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                          booleanDatatype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:no_value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    validateConversion<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_VALIDATE_CONVERSION:validate_conversion<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        STRING:&#39;maybe&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      dataType<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        oracleBuiltInDatatype<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                          booleanDatatype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:is_maybe_boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        ID:dump<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            cast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_CAST:cast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                STRING:&#39;yes&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              dataType<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                oracleBuiltInDatatype<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                                  booleanDatatype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:dump_yes_value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22ac9-3\" ><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/boolean_datatype-1.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/boolean_datatype-1.svg\" alt=\"Parse tree with Boolean data type\" class=\"wp-image-13168\"\/><\/a><\/figure>\n\n\n<p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Boolean Expressions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The impact of <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/boolean-expressions.html#GUID-E492D339-5AAF-43C1-95B8-88DB1CDED0D9\">Boolean expressions<\/a> is huge. A <code>condition<\/code> becomes an <code>expression<\/code> that returns a Boolean expression. Consequently, conditions can be used wherever expressions are permitted.<\/p>\n\n\n<div class=\"jq-tabs tabs_wrapper tabs_horizontal\"><ul><li><a href=\"#tab-6a3a4bfb22c9c-1\">Query<\/a><\/li><li><a href=\"#tab-6a3a4bfb22c9c-2\">Parse tree<\/a><\/li><li><a href=\"#tab-6a3a4bfb22c9c-3\">Parse tree (graph)<\/a><\/li><\/ul><div id=\"tab-6a3a4bfb22c9c-1\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">11a) Query using Boolean expressions<\/span><span role=\"button\" tabindex=\"0\" data-code=\"with\n   function f(p in boolean) return boolean is\n   begin\n      return p;\n   end;\nselect (select count(*) from emp) = 14 and (select count(*) from dept) = 4 as is_complete,\n       f(1&gt;0) is true as is_true,\n       cast(null as boolean) is not null as is_not_null;\n\/\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">function<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">f<\/span><span style=\"color: #D4D4D4\">(p <\/span><span style=\"color: #569CD6\">in<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> p;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">end<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">count<\/span><span style=\"color: #D4D4D4\">(*) <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> emp) = <\/span><span style=\"color: #B5CEA8\">14<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">count<\/span><span style=\"color: #D4D4D4\">(*) <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> dept) = <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> is_complete,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       f(<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&gt;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">true<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> is_true,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       <\/span><span style=\"color: #DCDCAA\">cast<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">boolean<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">is not null<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> is_not_null;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"IS_COMPLETE IS_TRUE     IS_NOT_NULL\n----------- ----------- -----------\nTRUE        TRUE        FALSE\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">IS_COMPLETE IS_TRUE     IS_NOT_NULL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------- ----------- -----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">TRUE        TRUE        FALSE<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22c9c-2\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">11b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          withClause\n            K_WITH:with\n            plsqlDeclarations\n              functionDeclaration\n                K_FUNCTION:function\n                plsqlCode\n                  ID:f\n                  LPAR:(\n                  ID:p\n                  K_IN:in\n                  K_BOOLEAN:boolean\n                  RPAR:)\n                  K_RETURN:return\n                  K_BOOLEAN:boolean\n                  K_IS:is\n                  ID:begin\n                  K_RETURN:return\n                  ID:p\n                  SEMI:;\n                K_END:end\n                SEMI:;\n          queryBlock\n            K_SELECT:select\n            selectList\n              selectItem\n                expression:simpleComparisionCondition\n                  expression:simpleComparisionCondition\n                    expression:scalarSubqueryExpression\n                      LPAR:(\n                      subquery:subqueryQueryBlock\n                        queryBlock\n                          K_SELECT:select\n                          selectList\n                            selectItem\n                              expression:functionExpressionParent\n                                functionExpression\n                                  sqlName\n                                    unquotedId\n                                      keywordAsId\n                                        K_COUNT:count\n                                  LPAR:(\n                                  functionParameter\n                                    condition\n                                      expression:allColumnWildcardExpression\n                                        AST:*\n                                  RPAR:)\n                          fromClause\n                            K_FROM:from\n                            fromItem:tableReferenceFromItem\n                              tableReference\n                                queryTableExpression\n                                  sqlName\n                                    unquotedId\n                                      ID:emp\n                      RPAR:)\n                    simpleComparisionOperator:eq\n                      EQUALS:=\n                    expression:logicalCondition\n                      expression:simpleExpressionNumberLiteral\n                        NUMBER:14\n                      K_AND:and\n                      expression:scalarSubqueryExpression\n                        LPAR:(\n                        subquery:subqueryQueryBlock\n                          queryBlock\n                            K_SELECT:select\n                            selectList\n                              selectItem\n                                expression:functionExpressionParent\n                                  functionExpression\n                                    sqlName\n                                      unquotedId\n                                        keywordAsId\n                                          K_COUNT:count\n                                    LPAR:(\n                                    functionParameter\n                                      condition\n                                        expression:allColumnWildcardExpression\n                                          AST:*\n                                    RPAR:)\n                            fromClause\n                              K_FROM:from\n                              fromItem:tableReferenceFromItem\n                                tableReference\n                                  queryTableExpression\n                                    sqlName\n                                      unquotedId\n                                        ID:dept\n                        RPAR:)\n                  simpleComparisionOperator:eq\n                    EQUALS:=\n                  expression:simpleExpressionNumberLiteral\n                    NUMBER:4\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:is_complete\n              COMMA:,\n              selectItem\n                expression:isTrueCondition\n                  expression:functionExpressionParent\n                    functionExpression\n                      sqlName\n                        unquotedId\n                          ID:f\n                      LPAR:(\n                      functionParameter\n                        condition\n                          expression:simpleComparisionCondition\n                            expression:simpleExpressionNumberLiteral\n                              NUMBER:1\n                            simpleComparisionOperator:gt\n                              GT:&gt;\n                            expression:simpleExpressionNumberLiteral\n                              NUMBER:0\n                      RPAR:)\n                  K_IS:is\n                  K_TRUE:true\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:is_true\n              COMMA:,\n              selectItem\n                expression:isNullCondition\n                  expression:specialFunctionExpressionParent\n                    specialFunctionExpression\n                      cast\n                        K_CAST:cast\n                        LPAR:(\n                        expression:simpleExpressionName\n                          sqlName\n                            unquotedId\n                              keywordAsId\n                                K_NULL:null\n                        K_AS:as\n                        dataType\n                          oracleBuiltInDatatype\n                            booleanDatatype\n                              K_BOOLEAN:boolean\n                        RPAR:)\n                  K_IS:is\n                  K_NOT:not\n                  K_NULL:null\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:is_not_null\n      sqlEnd\n        SEMI:;\n        SOL:\/\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          withClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_WITH:with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            plsqlDeclarations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              functionDeclaration<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_FUNCTION:function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                plsqlCode<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  ID:f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  ID:p<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_IN:in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_RETURN:return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  ID:begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_RETURN:return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  ID:p<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_END:end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                expression:simpleComparisionCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:simpleComparisionCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:scalarSubqueryExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        K_COUNT:count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      expression:allColumnWildcardExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        AST:*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      ID:emp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    simpleComparisionOperator:eq<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      EQUALS:=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:logicalCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        NUMBER:14<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      K_AND:and<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      expression:scalarSubqueryExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          K_COUNT:count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        expression:allColumnWildcardExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                          AST:*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                  queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                        ID:dept<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  simpleComparisionOperator:eq<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    EQUALS:=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    NUMBER:4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:is_complete<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                expression:isTrueCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          ID:f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          expression:simpleComparisionCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              NUMBER:1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            simpleComparisionOperator:gt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              GT:&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleExpressionNumberLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              NUMBER:0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_TRUE:true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:is_true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                expression:isNullCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:specialFunctionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    specialFunctionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      cast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        K_CAST:cast<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                                K_NULL:null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        dataType<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          oracleBuiltInDatatype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            booleanDatatype<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_BOOLEAN:boolean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_NOT:not<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_NULL:null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:is_not_null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SOL:\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22c9c-3\" ><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/boolean_expression.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/boolean_expression.svg\" alt=\"Parse tree with Boolean expression\" class=\"wp-image-13172\"\/><\/a><\/figure>\n\n\n<p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">JSON Schema<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There is an extended <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/SQL-JSON-Conditions.html#GUID-99B9493D-2929-4A09-BA39-A56F8E7319DA\">is_JSON_condition<\/a><\/code> that makes it possible to validate a JSON document against a <a href=\"https:\/\/json-schema.org\/learn\/getting-started-step-by-step\">JSON schema<\/a>.<\/p>\n\n\n<div class=\"jq-tabs tabs_wrapper tabs_horizontal\"><ul><li><a href=\"#tab-6a3a4bfb22e68-1\">Query<\/a><\/li><li><a href=\"#tab-6a3a4bfb22e68-2\">Parse tree<\/a><\/li><li><a href=\"#tab-6a3a4bfb22e68-3\">Parse tree (graph)<\/a><\/li><\/ul><div id=\"tab-6a3a4bfb22e68-1\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">12a) Query using JSON schema<\/span><span role=\"button\" tabindex=\"0\" data-code=\"column j format a20\nwith\n   t (j) as (values\n      (json('&#091;&quot;a&quot;, &quot;b&quot;&#093;')),            -- JSON array\n      (json('{&quot;a&quot;: &quot;a&quot;, &quot;b&quot;: &quot;b&quot;}')),  -- JSON object without id property\n      (json('{&quot;id&quot;: 42}')),            -- JSON object with numeric id property\n      (json('{&quot;id&quot;: &quot;42&quot;}'))           -- JSON object with string id property\n   )\nselect j,\n       j is json validate '\n          {\n             &quot;type&quot;: &quot;object&quot;,\n             &quot;properties&quot;: {\n                &quot;id&quot;: { &quot;type&quot;: &quot;number&quot; }\n             }\n          }' as is_valid\n  from t;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">column<\/span><span style=\"color: #D4D4D4\"> j format a20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   t (j) <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      (json(<\/span><span style=\"color: #CE9178\">&#39;[&quot;a&quot;, &quot;b&quot;]&#39;<\/span><span style=\"color: #D4D4D4\">)),            <\/span><span style=\"color: #6A9955\">-- JSON array<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      (json(<\/span><span style=\"color: #CE9178\">&#39;{&quot;a&quot;: &quot;a&quot;, &quot;b&quot;: &quot;b&quot;}&#39;<\/span><span style=\"color: #D4D4D4\">)),  <\/span><span style=\"color: #6A9955\">-- JSON object without id property<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      (json(<\/span><span style=\"color: #CE9178\">&#39;{&quot;id&quot;: 42}&#39;<\/span><span style=\"color: #D4D4D4\">)),            <\/span><span style=\"color: #6A9955\">-- JSON object with numeric id property<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      (json(<\/span><span style=\"color: #CE9178\">&#39;{&quot;id&quot;: &quot;42&quot;}&#39;<\/span><span style=\"color: #D4D4D4\">))           <\/span><span style=\"color: #6A9955\">-- JSON object with string id property<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> j,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       j <\/span><span style=\"color: #569CD6\">is<\/span><span style=\"color: #D4D4D4\"> json validate <\/span><span style=\"color: #CE9178\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">          {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">             &quot;type&quot;: &quot;object&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">             &quot;properties&quot;: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">                &quot;id&quot;: { &quot;type&quot;: &quot;number&quot; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">             }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">          }&#39;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">as<\/span><span style=\"color: #D4D4D4\"> is_valid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"J                    IS_VALID\n-------------------- -----------\n&#091;&quot;a&quot;,&quot;b&quot;&#093;            FALSE\n{&quot;a&quot;:&quot;a&quot;,&quot;b&quot;:&quot;b&quot;}    TRUE\n{&quot;id&quot;:42}            TRUE\n{&quot;id&quot;:&quot;42&quot;}          FALSE\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">J                    IS_VALID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-------------------- -----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">[&quot;a&quot;,&quot;b&quot;]            FALSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{&quot;a&quot;:&quot;a&quot;,&quot;b&quot;:&quot;b&quot;}    TRUE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{&quot;id&quot;:42}            TRUE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{&quot;id&quot;:&quot;42&quot;}          FALSE<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22e68-2\" ><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(3 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">12b) Parse tree<\/span><span role=\"button\" tabindex=\"0\" data-code=\"file\n  dmlStatement\n    selectStatement\n      select\n        subquery:subqueryQueryBlock\n          withClause\n            K_WITH:with\n            factoringClause\n              subqueryFactoringClause\n                sqlName\n                  unquotedId\n                    ID:t\n                LPAR:(\n                sqlName\n                  unquotedId\n                    ID:j\n                RPAR:)\n                K_AS:as\n                valuesClause\n                  LPAR:(\n                  K_VALUES:values\n                  valuesRow\n                    LPAR:(\n                    expression:functionExpressionParent\n                      functionExpression\n                        sqlName\n                          unquotedId\n                            keywordAsId\n                              K_JSON:json\n                        LPAR:(\n                        functionParameter\n                          condition\n                            expression:simpleExpressionStringLiteral\n                              STRING:'&#091;&quot;a&quot;, &quot;b&quot;&#093;'\n                        RPAR:)\n                    RPAR:)\n                  COMMA:,\n                  valuesRow\n                    LPAR:(\n                    expression:functionExpressionParent\n                      functionExpression\n                        sqlName\n                          unquotedId\n                            keywordAsId\n                              K_JSON:json\n                        LPAR:(\n                        functionParameter\n                          condition\n                            expression:simpleExpressionStringLiteral\n                              STRING:'{&quot;a&quot;: &quot;a&quot;, &quot;b&quot;: &quot;b&quot;}'\n                        RPAR:)\n                    RPAR:)\n                  COMMA:,\n                  valuesRow\n                    LPAR:(\n                    expression:functionExpressionParent\n                      functionExpression\n                        sqlName\n                          unquotedId\n                            keywordAsId\n                              K_JSON:json\n                        LPAR:(\n                        functionParameter\n                          condition\n                            expression:simpleExpressionStringLiteral\n                              STRING:'{&quot;id&quot;: 42}'\n                        RPAR:)\n                    RPAR:)\n                  COMMA:,\n                  valuesRow\n                    LPAR:(\n                    expression:functionExpressionParent\n                      functionExpression\n                        sqlName\n                          unquotedId\n                            keywordAsId\n                              K_JSON:json\n                        LPAR:(\n                        functionParameter\n                          condition\n                            expression:simpleExpressionStringLiteral\n                              STRING:'{&quot;id&quot;: &quot;42&quot;}'\n                        RPAR:)\n                    RPAR:)\n                  RPAR:)\n          queryBlock\n            K_SELECT:select\n            selectList\n              selectItem\n                expression:simpleExpressionName\n                  sqlName\n                    unquotedId\n                      ID:j\n              COMMA:,\n              selectItem\n                expression:isJsonCondition\n                  expression:simpleExpressionName\n                    sqlName\n                      unquotedId\n                        ID:j\n                  K_IS:is\n                  K_JSON:json\n                  jsonConditionOption:jsonConditionOptionValidate\n                    K_VALIDATE:validate\n                    expression:simpleExpressionStringLiteral\n                      STRING:'\\n          {\\n             &quot;type&quot;: &quot;object&quot;,\\n             &quot;properties&quot;: {\\n                &quot;id&quot;: { &quot;type&quot;: &quot;number&quot; }\\n             }\\n          }'\n                K_AS:as\n                sqlName\n                  unquotedId\n                    ID:is_valid\n            fromClause\n              K_FROM:from\n              fromItem:tableReferenceFromItem\n                tableReference\n                  queryTableExpression\n                    sqlName\n                      unquotedId\n                        ID:t\n      sqlEnd\n        SEMI:;\n  &lt;EOF&gt;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  dmlStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    selectStatement<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        subquery:subqueryQueryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          withClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_WITH:with<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            factoringClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              subqueryFactoringClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:j<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                valuesClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_VALUES:values<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              STRING:&#39;[&quot;a&quot;, &quot;b&quot;]&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              STRING:&#39;{&quot;a&quot;: &quot;a&quot;, &quot;b&quot;: &quot;b&quot;}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              STRING:&#39;{&quot;id&quot;: 42}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  valuesRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:functionExpressionParent<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      functionExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            keywordAsId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        LPAR:(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        functionParameter<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                          condition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                            expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                              STRING:&#39;{&quot;id&quot;: &quot;42&quot;}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  RPAR:)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          queryBlock<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            K_SELECT:select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            selectList<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      ID:j<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              COMMA:,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              selectItem<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                expression:isJsonCondition<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  expression:simpleExpressionName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        ID:j<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_IS:is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  K_JSON:json<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  jsonConditionOption:jsonConditionOptionValidate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    K_VALIDATE:validate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    expression:simpleExpressionStringLiteral<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      STRING:&#39;\\n          {\\n             &quot;type&quot;: &quot;object&quot;,\\n             &quot;properties&quot;: {\\n                &quot;id&quot;: { &quot;type&quot;: &quot;number&quot; }\\n             }\\n          }&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                K_AS:as<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ID:is_valid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            fromClause<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              K_FROM:from<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              fromItem:tableReferenceFromItem<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                tableReference<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                  queryTableExpression<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    sqlName<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                      unquotedId<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        ID:t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      sqlEnd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        SEMI:;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  &lt;EOF&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><div id=\"tab-6a3a4bfb22e68-3\" ><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/json_schema.svg\"><img wpfc-lazyload-disable=\"true\" decoding=\"async\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/json_schema.svg\" alt=\"Parse tree with JSON schema\" class=\"wp-image-13175\"\/><\/a><\/figure>\n\n\n<p><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-else\">What Else?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There are more new features in the Oracle Database 23c that you can use in the <code>select<\/code> statement, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The data quality operators <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/data-quality-operators.html#GUID-C13A179C-1F82-4522-98AA-E21C6504755E\">fuzzy_match<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/data-quality-operators.html#GUID-4D870366-C06F-4E63-BE15-609C1F2A96D3\">phonic_encode<\/a><\/code><\/li>\n\n\n\n<li>Dangling predicates in <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/lnpls\/expression.html#GUID-D4700B45-F2C8-443E-AEE7-2BD20FFD45B8__CHDIFFCB\">case expressions<\/a> and <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/lnpls\/CASE-statement.html#GUID-F4251A23-0284-4990-A156-00A92F83BC35\">case statements<\/a> within <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__GUID-28DA0E1D-87BF-462E-BCB8-8F77921022F9\">plsql_declarations<\/a><\/code><\/li>\n\n\n\n<li>New functions related to the Boolean data type: <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/boolean_and_agg.html#GUID-AF3C1A26-C7A1-4BD2-B15C-86B761D4D8D9\">boolean_and_agg<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/every.html#GUID-C34D8A50-3050-4F32-941A-8C2512DEC62D\">every<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/boolean_or_agg.html#GUID-C3E187DE-BD26-4440-B0AD-51342FFA4775\">boolean_or_agg<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/to_boolean.html#GUID-B4FA8F5F-DD2A-4BEA-946A-B3CA60509294\">to_boolean<\/a><\/code><\/li>\n\n\n\n<li>New functions related to <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/Changes-in-This-Release-for-Oracle-Database-SQL-Language-Reference.html#GUID-3C11D3A9-8B14-4DCC-B212-B7FE57EE81E8__GUID-9D95D7B6-7E2C-4B8C-94B5-23434B5ABB4E\">domains<\/a>: <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/domain_check.html#GUID-599390A5-1B96-4465-82CE-DBC2345A018B\">domain_check<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/domain_check_type.html#GUID-9ED35142-A66C-4511-9DE1-B8BB4350DE41\">domain_check_type<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/domain_display.html#GUID-BF1D853F-5BA8-4E9E-B8EB-BF7502F11D20\">domain_display<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/domain_name.html#GUID-BFF71A4E-8FF2-407A-8661-C0A24D4E5487\">domain_name<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/domain_order.html#GUID-FC34F669-0BCA-4F8A-B911-4ACAA1F8F11D\">domain_order<\/a><\/code><\/li>\n\n\n\n<li>New <code>JSON_passing_clause<\/code> and <code>type<\/code> clause in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_QUERY.html#GUID-6D396EC4-D2AA-43D2-8F5D-08D646A4A2D9\">json_query<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_VALUE.html#GUID-C7F19D36-1E75-4CB2-AE67-ADFBAD23CBC2\">json_value<\/a><\/code><\/li>\n\n\n\n<li>New <code>on null<\/code> and <code>on error<\/code> clauses in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/json_scalar.html#GUID-F05BD523-F827-4A5F-9A82-8CBC2DB04E2E\">json_scalar<\/a><\/code><\/li>\n\n\n\n<li>New <code>ordered<\/code> clause in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_SERIALIZE.html#GUID-01B769C6-A7B3-4136-977F-63CA05963D21\">json_serialize<\/a><\/code><\/li>\n\n\n\n<li>New <code>type<\/code> clause in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_TABLE.html#GUID-3C8E63B5-0B94-4E86-A2D3-3D4831B67C62\">json_table<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_TRANSFORM.html#GUID-DD2A821B-C688-4310-81B5-5F45090B9366\">json_transform<\/a><\/code><\/li>\n\n\n\n<li>New operations <code>sort<\/code>, <code>nested_path<\/code>, <code>case<\/code>, <code>copy<\/code>, <code>intersect<\/code>, <code>merge<\/code>, <code>minus<\/code>, <code>prepend<\/code> and <code>union<\/code> in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/JSON_TRANSFORM.html#GUID-DD2A821B-C688-4310-81B5-5F45090B9366\">json_transform<\/a><\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We can also assume that more features will be added with future release updates. The AI vector search, for example, should be available with 23.4 later this year.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Outlook<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The plan for IslandSQL is still the same as outlined in the <a href=\"https:\/\/www.salvis.com\/blog\/2023\/03\/05\/islandsql-episode-4-expressions-2\/#outlook\">previous episode<\/a>. So we should cover the remaining DML statements (<code>call<\/code>,&nbsp;<code>delete<\/code>,&nbsp;<code>explain plan<\/code>,&nbsp;<code>insert<\/code>,&nbsp;<code>merge<\/code> and&nbsp;<code>update<\/code>) in the next episode.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In the&nbsp;last episode, we extended the expressions in the IslandSQL grammar to complete the lock table statement. The grammar now fully covers expressions, conditions and the select statement. In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":13166,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[139,86,137,140,85],"class_list":["post-12278","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-antlr","tag-code-analysis","tag-islandsql","tag-oracle-26ai","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>IslandSQL Episode 5: Select in Oracle Database 23c - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"description\" content=\"In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the SELECT statement.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IslandSQL Episode 5: Select in Oracle Database 23c - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the SELECT statement.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-12T12:10:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-17T09:13:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL5.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"IslandSQL Episode 5: Select in Oracle Database 23c\",\"datePublished\":\"2024-01-12T12:10:38+00:00\",\"dateModified\":\"2024-06-17T09:13:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/\"},\"wordCount\":1453,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL5.png\",\"keywords\":[\"ANTLR\",\"Code Analysis\",\"IslandSQL\",\"Oracle 26ai\",\"SQL\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/\",\"name\":\"IslandSQL Episode 5: Select in Oracle Database 23c - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL5.png\",\"datePublished\":\"2024-01-12T12:10:38+00:00\",\"dateModified\":\"2024-06-17T09:13:32+00:00\",\"description\":\"In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the SELECT statement.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL5.png\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL5.png\",\"width\":500,\"height\":500,\"caption\":\"IslandSQL Episode 5 - Select in Oracle Database 23c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/12\\\/islandsql-episode-5-select\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"IslandSQL Episode 5: Select in Oracle Database 23c\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"IslandSQL Episode 5: Select in Oracle Database 23c - Philipp Salvisberg&#039;s Blog","description":"In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the SELECT statement.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/","og_locale":"en_US","og_type":"article","og_title":"IslandSQL Episode 5: Select in Oracle Database 23c - Philipp Salvisberg&#039;s Blog","og_description":"In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the SELECT statement.","og_url":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2024-01-12T12:10:38+00:00","article_modified_time":"2024-06-17T09:13:32+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL5.png","type":"image\/png"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"IslandSQL Episode 5: Select in Oracle Database 23c","datePublished":"2024-01-12T12:10:38+00:00","dateModified":"2024-06-17T09:13:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/"},"wordCount":1453,"commentCount":1,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL5.png","keywords":["ANTLR","Code Analysis","IslandSQL","Oracle 26ai","SQL"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/","url":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/","name":"IslandSQL Episode 5: Select in Oracle Database 23c - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL5.png","datePublished":"2024-01-12T12:10:38+00:00","dateModified":"2024-06-17T09:13:32+00:00","description":"In this episode, we will focus on optimizer hints and new features in the Oracle Database 23c that can be used in the SELECT statement.","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL5.png","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL5.png","width":500,"height":500,"caption":"IslandSQL Episode 5 - Select in Oracle Database 23c"},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"IslandSQL Episode 5: Select in Oracle Database 23c"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/12278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=12278"}],"version-history":[{"count":127,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/12278\/revisions"}],"predecessor-version":[{"id":13429,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/12278\/revisions\/13429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/13166"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=12278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=12278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=12278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}