public class TCreateProcedureStmt extends TRoutine
TGSqlParser.expandDollarString() 方法处理,处理后的代码被解析。
2024/6/22, snowflake create procedure 的 body 如果是采用 $$ body $$, 在 lexer 中分解为独立的 token
方法2,把 $$ body $$ 作为一个整体字符串看待,需要进行二次解析, 都是调用 postgres parser 进行的分析。采用这种方法是,body中用到的 select
等语句用的是 postgres的语法分析,而不是原数据库 select 语句的语法分析,这可能导致不正确的解析结果。
这种方法为历史遗留问题,需要都改为方法1。目前采用这种方法的数据库有:
netezza,
vertica
Supported databases
TCustomSqlStatement.SqlNormalizationProfilelanguage, LANGUAGE_PLPGSQL, LANGUAGE_SQL, LANGUAGE_UNKNOWN, returnDataTypeblockBody, bodyStatements, declareStatements, exceptionClausedummytag, fromClause, fromSourceJoin, fromSourceTable, isctequery, isparsed, joins, parser, plsqlparser, relationAttributes, rootNode, semicolonended, sourcetokenlist, sqlstatementtype, stmtScope, tablesdbvendor, doubleLinkedTokenListToString, nodeActionAppend, nodeActionInsert, nodeActionRemove, nodeActionUnknown, nodeActionUpdate, nodeActionUpdateText, nodeChangeEndToken, nodeChangeStartToken| Constructor and Description |
|---|
TCreateProcedureStmt(EDbVendor dbvendor) |
| Modifier and Type | Method and Description |
|---|---|
void |
accept(TParseTreeVisitor v)
Accept a visitor
|
void |
acceptChildren(TParseTreeVisitor v)
Accept a visitor to iterate this class and sub-nodes of this class
|
int |
doParseStatement(TCustomSqlStatement psql) |
TConstant |
getLinkSymbol() |
TConstant |
getObjfile() |
TConstant |
getProcedureLanguage() |
TObjectName |
getProcedureName()
The name that you give to the procedure that you are declaring or defining.
|
TPTNodeList<TProcedureOption> |
getProcedureOptions() |
TTableElementList |
getReturnTableDefinitions()
Returns the column definitions from the RETURNS TABLE(...) clause.
|
TObjectName |
getStoredProcedureName() |
boolean |
isForReplication() |
void |
setForReplication(boolean isForReplication) |
void |
setProcedureName(TObjectName procedureName) |
void |
setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions) |
static void |
validateSemicolonsBetweenStatements(TCustomSqlStatement psql,
TStatementListSqlNode stmtList)
Validates that each statement in a Teradata procedure body (except the last) is terminated with a semicolon.
|
getReturnDataType, getRoutineBody, getRoutineBodyInConstant, getRoutineLanguage, getRoutineLanguageInConstant, getRoutineName, isBodyInSQL, isGaussDBSpInOracle, setReturnDataType, setRoutineBody, setRoutineBodyInConstant, setRoutineLanguage, setRoutineLanguageInConstant, setRoutineNameisWrapped, setWrappedgetParameterDeclarations, getProcHandle, setParameterDeclarations, setProcHandlegetBlockBody, getBodyStatements, getDeclareStatements, getEndlabelName, getExceptionClause, getLabelName, getLabelNameStr, setBodyStatements, setDeclareStatements, setExceptionClauseaddToTables, addWhereClause, analyzeFromTable, analyzeFromTable, analyzeJoin, analyzeTablename, analyzeTableOrJoin, asCanonical, checkNonQualifiedColumnReferenceInSubQueryOfUplevelStmt, clearError, computeSqlHash, dochecksyntax, findTable, fireOnMetaDatabaseTableColumn, getAncestorStmt, getAttributes, getColumnsInTable, getColumnsInTable, getCteIncludeThisStmt, getCteList, getDaxFunctionStack, getErrorCount, getErrormessage, getExpandedResultColumns, getFirstPhysicalTable, getFrameStack, getFromClause, getFromSourceJoin, getFromSourceTable, getGlobalScope, getIndexColumns, getJoins, getOrphanColumns, getOutputClause, getParentObjectName, getParentStmt, getQueryId, getRelationName, getRelations, getResultColumnList, getReturningClause, getSqlEnv, getSqlHash, getSqlHash, getStatements, getStmtScope, getSymbolTable, getSyntaxErrors, getSyntaxHints, getTables, getTargetTable, getTokenList, getTopClause, getTopStatement, getUsingVariableList, getVariableStack, getWhereClause, isathenaplsql, isBigQueryplsql, isdatabricksplsql, isGaussDBStoredProcedure, isgreeplumplsql, isnzplsql, isoracleplsql, ispgplsql, isprestoplsql, issnowflakeplsql, isTableACTE, isverticaplsql, linkColumnReferenceToTable, linkColumnToTable, linkToFirstTable, locateVariableOrParameter, locateVariableOrParameter, OracleStatementCanBeSeparatedByBeginEndPair, parseerrormessagehandle, parsestatement, parsestatement, searchCTEList, searchDaxVariableInStack, searchFunctionInSQLEnv, setAlreadyAddToParent, setCteIncludeThisStmt, setCteList, setEndlabelName, setFrameStack, setFromClause, setLabelName, setOutputClause, setParentStmt, setParentStmtToNull, setQueryId, setResultColumnList, setReturningClause, setSqlHash, setStmtScope, setTargetTable, setTopClause, setUsingVariableList, setVariableStack, setWhereClause, size, toNormalizedSql, toScript, VerticaStatementCanBeSeparatedByBeginEndPairaddAllMyTokensToTokenList, addToTokenChain, appendNewNode, calculateTokenCount, doAppendNewNode, doParse, fastSetString, getAnchorNode, getColumnNo, getCommentAfterNode, getCommentBeforeNode, getCompactString, getDummyTag, getEndToken, getEvaluateDatatype, getEvalValue, getGsqlparser, getLineNo, getLocation, getMd5, getNodeStatus, getNodeType, getPlainText, getStartToken, getTokenCount, hasNext, init, init, init, init, init, init, init, init, init, init, insertAfterAToken, insertNewNodeBeforeMe, isChanged, isTokensInChain, next, refreshAllNodesTokenCount, remove, removeAllMyTokensFromTokenList, removeTokens, removeTokensBetweenNodes, removeTokensBetweenToken, replaceWithNewNode, resetIterator, setAnchorNode, setChanged, setDummyTag, setEndToken, setEndToken, setEndToken, setEndToken, setEndToken, setEndTokenDirectly, setEvaluateDatatype, setEvalValue, setGsqlparser, setIncludingComment, setLocation, setNewSubNode, setNodeStatus, setNodeType, setParent, setPlainText, setStartToken, setStartToken, setStartToken, setStartToken, setStartTokenDirectly, setString, setString2, subNodeInNode, toString, toString2clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitforEachRemainingpublic TCreateProcedureStmt(EDbVendor dbvendor)
public TTableElementList getReturnTableDefinitions()
RETURNS TABLE(id INT, name VARCHAR), this returns
a list containing column definitions for "id INT" and "name VARCHAR".
Returns null if the procedure does not use RETURNS TABLE or has an empty TABLE().
Currently supported for Snowflake.
public TConstant getProcedureLanguage()
public TConstant getLinkSymbol()
public TConstant getObjfile()
public void setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions)
public TPTNodeList<TProcedureOption> getProcedureOptions()
public void setForReplication(boolean isForReplication)
public boolean isForReplication()
public TObjectName getStoredProcedureName()
getStoredProcedureName in class TStoredProcedureSqlStatementpublic TObjectName getProcedureName()
public int doParseStatement(TCustomSqlStatement psql)
doParseStatement in class TCommonStoredProcedureSqlStatementpublic void accept(TParseTreeVisitor v)
TParseTreeNodeaccept in interface Visitableaccept in class TBlockSqlStatementv - visitor is a descendant class of TParseTreeVisitorpublic void acceptChildren(TParseTreeVisitor v)
TParseTreeNodeacceptChildren in interface VisitableacceptChildren in class TBlockSqlStatementv - visitor is a descendant class of TParseTreeVisitorpublic void setProcedureName(TObjectName procedureName)
public static void validateSemicolonsBetweenStatements(TCustomSqlStatement psql, TStatementListSqlNode stmtList)