我需要创建一个 linux 脚本,在这个脚本中我需要捕获 Oracle 中的 SQL 查询的结果,<<EOF并将其放入一个变量中,例如:

sqlplus -s /nolog<<EOF
conn c##myuser/mypassowd
col ,sql,linux,bash,oracle,shell"/>
	














首页 > 解决方案 > 如何从 <

我需要创建一个 linux 脚本,在这个脚本中我需要捕获 Oracle 中的 SQL 查询的结果,<<EOF并将其放入一个变量中,例如:

sqlplus -s /nolog<<EOF
conn c##myuser/mypassowd
col 

问题描述

我需要创建一个 linux 脚本,在这个脚本中我需要捕获 Oracle 中的 SQL 查询的结果,<<EOF并将其放入一个变量中,例如:

sqlplus -s /nolog<<EOF
conn c##myuser/mypassowd
col product for a20
select product from myuser.table where id = 10;
EOF

我需要将 SQL 查询的结果放入 bash 变量中,我该怎么做?


Django model.field 验证器不会为必需的布尔字段执行

我的用例:

我有一个用户必须回答的是/否问题,但他们可能会回答是或否。我不想提供默认值,因为我需要用户主动选择他们的答案。如果他们没有选择答案,我想要一个表单验证错误,例如“此字段是必需的”。

我知道可以将其作为 CharField 存储在数据库中,但我更愿意将其存储为必需的 BooleanField。问题似乎是表单验证逻辑不会强制要求布尔字段为 required=True,也不会在 POST 数据中返回 '' 值时调用模型字段的自定义验证器。

我的设置:

boolean_choices = (
  (True, 'Yes'),
  (False, 'No'),
)

def boolean_validator(value):
  if value is not True and value is not False:
    raise ValidationError("This field is required.")

class Item(models.Model):
  accept = models.BooleanField(
    choices=boolean_choices,
    validators=[boolean_validator]
  )

class ItemForm(ModelForm):
  class Meta:
      model = Item
      fields = ['accept']

该问题的完整工作演示在这里: https ://repl.it/@powderflask/django-model-form-validators

重现问题

  • 创建或编辑一个项目,并将 'accept' 值设置为 None ("-------") --> 保存将崩溃 - 通知 form.is_valid() 已通过,崩溃在 form.save() - -> 注意 boolean_validator 没有被调用。

  • 创建或编辑项目并选择“是”或“否”-> 保存将正常工作,您可以在终端中看到 boolean_validator DID 被调用。

我的怀疑

我怀疑在表单验证逻辑的深处有一个布尔字段的特殊情况,它通常是一个复选框(它有一个讨厌的习惯,即在未检查时不返回任何 POST 数据中的任何内容)。我怀疑很难区分“复选框未勾选,因此为 False”和“未返回值,因此引发RequiredField ValidationError),并且表单验证没有正确处理我的用例。

我的问题 我在这里做了一些无可救药的蠢事吗?我错过了什么吗?我应该放弃去洗个热水澡吗?感谢。

标签: sqllinuxbashoracleshell

解决方案


您需要一个此处的命令文档,然后将输出重定向到某个文件。

像这样的东西:

sqlplus -s /nolog > myfile.txt <<EOF
conn c##myuser/mypassowd
col product for a20
select product from myuser.table where id = 10;
EOF 

我自己没有方便的 sqlplus 来测试它,但上面应该是“关闭”...

这应该能够将其放入变量中:

myvar=$(sqlplus -s /nolog <<EOF
  conn c##myuser/mypassowd
  col product for a20
  select product from myuser.table where id = 10;
EOF
)

推荐阅读