我想在Oracle的SQL Developer(v17.2)中针对Oracle 12c数据库执行类似的操作:
ENV COUNT(1)
------ ----------
Dev1 7
我希望select返回这样的内容:
column dummyenv new_value thisenv
select name dummyenv from v$database;
如果我使用我的示例代码,有效地告诉我,我需要一个group by子句,因为它看到的是查询而不是查询结果的字符串文字。但添加一个小组并不适合我。
根据this question的答案,我尝试用
替换第一行PHONEID PERSONID PHONENUM TYPE
------- -------- ------------ ----
899250 ABC12345 123-456-7890 WORK
我也试过使用绑定变量,但我仍然会提示输入thisenv的值。所以,这些选择都不起作用。
我还应该尝试什么?
PHONE表如下所示:
public class DatePickerDialogFragment extends DialogFragment {
private static final String ARGUMENT_YEAR = "ARGUMENT_YEAR";
private static final String ARGUMENT_MONTH = "ARGUMENT_MONTH";
private static final String ARGUMENT_DAY = "ARGUMENT_DAY";
private DatePickerDialog.OnDateSetListener listener;
private int year;
private int month;
private int dayOfMonth;
public static DatePickerDialogFragment newInstance(final int year, final int month, final int dayOfMonth) {
final DatePickerDialogFragment df = new DatePickerDialogFragment();
final Bundle args = new Bundle();
args.putInt(ARGUMENT_YEAR, year);
args.putInt(ARGUMENT_MONTH, month);
args.putInt(ARGUMENT_DAY, dayOfMonth);
df.setArguments(args);
return df;
}
@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
retrieveArguments();
}
private void retrieveArguments() {
final Bundle args = getArguments();
if (args != null) {
year = args.getInt(ARGUMENT_YEAR);
month = args.getInt(ARGUMENT_MONTH);
dayOfMonth = args.getInt(ARGUMENT_DAY);
}
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
return new DatePickerDialog(getContext(), this.listener, this.year, this.month, this.dayOfMonth);
}
public void setListener(final DatePickerDialog.OnDateSetListener listener) {
this.listener = listener;
}
}
答案 0 :(得分:0)
您可以在标量子查询中计算电话数:
SELECT name,
(SELECT count(*) FROM phone) as phones
FROM v$database;
或者,由于通常不会授予对视图v$database
的选择权限,因此您可以使用函数sys_context
。因为它是一个标量,你可以把它放在查询中:
SELECT sys_context('userenv', 'db_name') as db_name, count(*)
FROM phone;
答案 1 :(得分:0)
别介意替换变量 - 您从以下SQL语句开始,这在语法上是不正确的:
select ( select name from ... ), count(1) from ...
- 由于使用了替换变量,它不会失败,它会作为一个简单的SQL语句失败。
如果您想要输出(如您所示),请将查询重写为
select name, ct
from (select name from v$database)
cross join
(select count(1) as ct from phone);
现在,如果需要,您可以使用替换变量:
SQL> define thisenv = '(select name from v$database)'
SQL> select name, ct
2 from &thisenv
3 cross join
4 (select count(1) as ct from phone);
当然,当我在我的机器上运行时,我收到一个错误(因为我没有表PHONE
),但它应该适合你。当我使用现有的表名时,它对我有用。