sql 查询语句截断问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 查询语句截断问题相关的知识,希望对你有一定的参考价值。

我有一个字段长度为40,我只要在select 这个字段显示的时候,只要是10个长度就可以了。select a(显示只要10个长度) from table

字段的值也是40个长度?

select left(a,10) from table

从a字段左边起取10个长度追问

我随便写的!!大概就是这个意思!!不要见外!!

追答

没事。小问题。
你可以看看sql的字符串函数、

参考技术A select substr(a,1,10) from table; 参考技术B select left(ltrim(a),10) from 表

如何在 SQL PLUS 的输入查询的 BEGIN END 语句中添加 if-else 条件

【中文标题】如何在 SQL PLUS 的输入查询的 BEGIN END 语句中添加 if-else 条件【英文标题】:How to add if-else condition in BEGIN END statement of the input Query to SQL PLUS 【发布时间】:2017-08-22 09:31:21 【问题描述】:

我有从平面文本文件加载表格的脚本,所以在加载表格之前,我想根据输入文件的可用性截断现有表格。 如果存在输入文件,则截断表并将新数据从文件加载到表。 所以在截断时我想检查输入文件是否存在,所以我写了如下代码:

truncateTables()
 
QUERY_TO_TRUNCATE_TABLES="ALTER SESSION ENABLE PARALLEL DML;
                    whenever sqlerror exit sql.sqlcode;
BEGIN
      if [$IsFile1 == 'TRUE']
      then
      EXECUTE IMMEDIATE  'DELETE /*+ parallel(A,8) */ FROM TableName1 A';
      else
      echo "no input file"
      fi;
      if [$IsFile2 == "TRUE"]
      then
      EXECUTE IMMEDIATE  'DELETE /*+ parallel(B,8) */ FROM TableName2 B';
      else
       echo "No input file"
       fi;
       COMMIT;
END;
       /
       ";

       EXECUTE_TO_TRUNCATE_TABLES=`sqlplus -s $DB_CONN_STR << EOF
                            SET serverout on feed off heading off tab off   serverout on pagesize 0 trimspool on linesize 1000
                            whenever sqlerror exit sql.sqlcode;
                            $QUERY_TO_TRUNCATE_TABLES;
                            EXIT;
                            EOF`
    retVal=$?
    errorORA=`echo "$EXECUTE_TO_TRUNCATE_TABLES" | grep -i 'ORA' | wc -l`
    errorSP=`echo "$EXECUTE_TO_TRUNCATE_TABLES" | grep -i 'SP' | wc -l`

    if [[ $retVal -ne 0 || $errorORA -ge 1 || $errorSP -ge 1 ]]
            then
            echo "Exiting with failure.......\n$retVal\n........"
            echo "Delete tables FAIL."
    else
            echo "tables Delete is Successful"
    fi
    

但似乎我们不能在 BEGIN 和 end 之间使用 if else 条件?我们如何修改此代码以便将其传递给 SQL PLUS?任何其他方式对我来说也可以。

【问题讨论】:

QUERY_TO_TRUNCATE_TABLES 的 BEGIN 和 END 之间的语言是什么?它不是 PL/SQL,Oracle 理解的语言。 为什么选择mysql标签? BEGIN END 块包含 PL/SQL 代码,我们不能在其中添加 if else 吗? 是的,您可以在 PL/SQL 中添加 IF else 但是您的语法不正确。正如 Tony Andrews 指出的那样,这看起来不像 PL/SQL。 【参考方案1】:

其实你把PLSQL代码和ksh混在一起了。

可以使用 kornshell 中的条件构建查询。以下是它的开始方式:

truncateTables()
 
      QUERY_TO_TRUNCATE_TABLES="ALTER SESSION ENABLE PARALLEL DML;
                    whenever sqlerror exit sql.sqlcode;
       BEGIN
";

    if [ "$IsFile1" == "TRUE" ]
    then
      QUERY_TO_TRUNCATE_TABLES=$QUERY_TO_TRUNCATE_TABLES"
         EXECUTE IMMEDIATE  'DELETE /*+ parallel(A,8) */ FROM TableName1 A';
;"
    else
      echo "no input file 1"
    fi

    if [ "$IsFile2" == "TRUE" ]
    then
      QUERY_TO_TRUNCATE_TABLES=$QUERY_TO_TRUNCATE_TABLES"
         EXECUTE IMMEDIATE  'DELETE /*+ parallel(B,8) */ FROM TableName2 B';
";
    else
      echo "No input file 2"
    fi

    QUERY_TO_TRUNCATE_TABLES=$QUERY_TO_TRUNCATE_TABLES"
              COMMIT;
       END;
/
";

希望对你有帮助

【讨论】:

以上是关于sql 查询语句截断问题的主要内容,如果未能解决你的问题,请参考以下文章

java模糊查询sql语句问题

PHP PDO 多选查询始终删除最后一个行集

sql语句模糊查询的问题?

python SQL模糊查询语句问题

SQL查询语句

限制准备好的语句一次执行一个查询