private boolean matchPLBlockEnd(Token[] tokens, int pos, Integer endObjectType) {
        boolean match = tokens[pos].getType() == this.tokenDefinition.END();
        int tokensLength = tokens.length;
        if (Objects.nonNull(endObjectType)) {
            if (endObjectType != Token.MIN_USER_TOKEN_TYPE) {
                // use MIN_USER_TOKEN_TYPE means place holder here
                // in which we can recognize `end object_name;` as pl block ending
                match &= (pos + 2 < tokensLength) && tokens[pos + 2].getType() == endObjectType;
            }
        }
        return match;
    }
<pre>
`subPLStack` in this function must not be empty because this fuction must be called when state in PL_STMT
`subPLStack` must have been pushed at least once before enter PL_STMT
</pre>
chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/SqlSplitter.java