sql 查询语句截断问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 查询语句截断问题相关的知识,希望对你有一定的参考价值。
我有一个字段长度为40,我只要在select 这个字段显示的时候,只要是10个长度就可以了。select a(显示只要10个长度) from table
字段的值也是40个长度?select left(a,10) from table
从a字段左边起取10个长度追问
我随便写的!!大概就是这个意思!!不要见外!!
追答没事。小问题。
你可以看看sql的字符串函数、
如何在 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 查询语句截断问题的主要内容,如果未能解决你的问题,请参考以下文章