小编Ton*_*ews的帖子

硬编码的STRINGS是否可以接受?

类似于硬编码文字是否可以接受?,但我在这里特别想到"魔法字符串".

在一个大型项目中,我们有一个配置选项表,如下所示:

Name         Value
----         -----
FOO_ENABLED  Y
BAR_ENABLED  N
...
Run Code Online (Sandbox Code Playgroud)

(数以百计).

通常的做法是调用泛型函数来测试这样的选项:

if (config_options.value('FOO_ENABLED') == 'Y') ...
Run Code Online (Sandbox Code Playgroud)

(当然,可能需要在系统代码的许多地方检查相同的选项.)

添加新选项时,我正在考虑添加一个隐藏"魔术字符串"的函数,如下所示:

if (config_options.foo_enabled()) ...
Run Code Online (Sandbox Code Playgroud)

然而,同事们认为我已经过火了并反对这样做,更喜欢硬编码,因为:

  • 这就是我们通常做的事情
  • 它使得在调试代码时更容易看到发生了什么

麻烦的是,我可以看到他们的观点!实际上,我们永远不会出于任何原因重命名选项,因此我能为我的函数考虑的唯一优势是编译器会捕获像fo_enabled()这样的拼写错误,但不能捕获'FO_ENABLED'.

你怎么看?我错过了其他任何优点/缺点吗?

language-agnostic literals string-literals hard-coding

2
推荐指数
5
解决办法
5338
查看次数

在SQL查询中替换NVL

我在数据库中遇到过这样的查询:

SELECT col_a
FROM my_table
WHERE
  nvl(col_b, 0) in
    nvl(nvl(:arg, col_b), 0)
Run Code Online (Sandbox Code Playgroud)

这将从我的表返回col_a,其中:

  • col_b ==:arg
  • 或者:如果:arg为null,则返回整个表

这似乎是一种非常复杂的方式来返回与输入参数匹配的一个或所有记录,或者只是根据输入参数的值选择整个表.

有没有更简单的方法来达到同样的效果?

另外,我注意到NVLOracle是特定的,在这个实例中使用它有什么好处COALESCE吗?

sql oracle plsql

2
推荐指数
1
解决办法
2031
查看次数

Oracle to_date with pm/am

我需要在oracle中将字符串转换为Date.

字符串的格式如下:

'08/11/1999 05:45:00 p.m.'
Run Code Online (Sandbox Code Playgroud)

但最后一个位置可以改变下午或者我试图做一些像:

to_date('08/11/1999 05:45:00 p.m.', 'dd/mm/yyyy hh:mi:ss a.m./p.m.')

to_date('08/11/1999 05:45:00 p.m.', 'dd/mm/yyyy hh:mi:ss am/pm')
Run Code Online (Sandbox Code Playgroud)

但是给我一个错误ORA-01855:AM/AM或PM/PM要求......任何想法?

oracle to-date

2
推荐指数
1
解决办法
3万
查看次数

Apex Interactive Grid 如何检索特定记录

我正在使用以下方法检索我的网格数据:

var ig$ = apex.region("myGrid1").widget(),
                view = ig$.interactiveGrid("getCurrentView");
Run Code Online (Sandbox Code Playgroud)

现在我想检查基于 2 列的特定记录:id1以及id2whereid1 = 1id2 = 7

我怎么能用javascript做到这一点?

oracle-apex oracle-apex-5.1

2
推荐指数
1
解决办法
4621
查看次数

Pl/SQL:如何对记录表进行排序?

我是 pl/sql 新手!我正在尝试使用简单的冒泡排序算法对记录表进行排序。问题是什么?

在哪里可以找到有关使用记录表的更多信息?

DECLARE
    text VARCHAR2(50);
TYPE TIP_VECTOR
IS
    TABLE OF INT INDEX BY BINARY_INTEGER;
TYPE contorRecord
IS
    record
    (
        codASCII VARCHAR2(3),
        contor   SMALLINT);
TYpe tip_vector2
IS
    TABLE OF contorRecord;
    VECTOR TIP_VECTOR;
    VECTOR2 TIP_VECTOR2 := TIP_VECTOR2();
  aux tip_vector2 := tip_vector2();
    v_char VARCHAR2(3);
    FLAG   BOOLEAN := TRUE;
    t smallint;
    n      SMALLINT := 1;
    ind    SMALLINT := 0;

begin
        AUX.EXTEND(1);
            WHILE(FLAG)
                    LOOP
                    FLAG  := FALSE;
    -- here is the problem; what i'm doing wrong?
                    FOR I IN 1..(vector2.count-1) LOOP 
    -- here …
Run Code Online (Sandbox Code Playgroud)

sorting oracle collections plsql

1
推荐指数
1
解决办法
2万
查看次数

将%rowtype与连接和重复列一起使用

给定(忽略缺少主键,外键等 - 这不是表设计,只是一个例子):

Order:
----------
ID NUMBER;
VENDOR NUMBER;
PART NUMBER;

Parts:
------------
ID NUMBER;
VENDOR NUMBER;
DESCRIPTION VARCHAR2(1000 CHAR);


cursor c1 is select * from order o left join parts p on o.part = p.id;
c_row c1%rowtype;
Run Code Online (Sandbox Code Playgroud)

如何区分将在联接中的两个VENDOR列?

我不认为我可以做c_row.value,因为那会是模棱两可的,我不认为像c_row.p.vendor这样的东西有效.

如何引用两个值列的特定实例?

oracle plsql join oracle10g

1
推荐指数
1
解决办法
3664
查看次数

OR子句是否会抑制oracle中的索引?

OR子句是否会抑制索引,如果是,有人可以提供适当的示例吗?

create table test2(field1 varchar2(100),field2 varchar2(100),
                   field3 number,field4 varchar2(100));

create index test2_idx1 on test2(field1);

create index test2_idx2 on test2(field3);

declare
  j number :=1;
begin
  for i in 1..500000 loop
    insert into test2 (field1,field2,field3,field4)
    values('field1='||j,'field2='||i,j,'field4='||??i);
    if (i mod 1000)=0 then 
      j:= j+1;
    end if; 
  end loop;
  commit;
end;

EXEC DBMS_STATS.GATHER_TABLE_STATS ('user', 'test2');

select * from test2 where field1='field1=1' or field3=1;
Run Code Online (Sandbox Code Playgroud)

sql oracle indexing plsql

1
推荐指数
1
解决办法
4496
查看次数

不使用 OR 子句的查询性能

我面临一个问题。我有一个疑问

Select * from tabA 
where (a) in (a,b,c) 
OR b in (a,b,c) 
Run Code Online (Sandbox Code Playgroud)

我想由于此查询而面临性能问题,因为我需要删除 or 条件,所以我尝试使用以下查询:

Select * from tabA 
where (a,b) in (a,b,c) 
Run Code Online (Sandbox Code Playgroud)

但这个查询似乎不起作用,请帮忙。我不想使用“或”条件。

oracle performance plsql

1
推荐指数
1
解决办法
2920
查看次数

如何在不使用触发器的情况下将条件DEFAULT值设置为oracle中的列?

如何在不使用触发器的情况下将条件DEFAULT值设置为oracle中的列?我想达到以下需求:

  1. 如果"flag1"= 1,则Newfield列的默认值必须为"4".
  2. 如果"flag1"= 2,则Newfield列的默认值必须为"5".

oracle database-design default constraints

1
推荐指数
1
解决办法
2043
查看次数

从表中选择并将新记录插入另一个表但更改一些值

我在两个表之间有一对多的关系......比如组织和成员

我想基于现有的组织(ID 111)创建一个新的组织,并复制所有成员,但将它们与新创建的组织相关联.

一些伪代码..

-- Just create a new organisation based on the new name and address
-- passed to the proc.
Insert into Organisation (newOrganisationName, newAddress) 
returning Organisation_ID into v_orgID;
Run Code Online (Sandbox Code Playgroud)

所以,现在我有v_orgID返回新组织ID的说999,我想成员从现有的组织复制与要说111的ID,并用新ORGID关联这些.

实现这个目标的最佳方法是什么...我应该循环插入还是可以使用Insert Into - select from方法

INSERT INTO Members (OrganisationID, Membername, MemberAddress)
(SELECT  v_orgID, MemberName, MemberAddress FROM Member
 WHERE  OrganisationId = 111)
Run Code Online (Sandbox Code Playgroud)

谢谢米克

sql oracle select insert

1
推荐指数
1
解决办法
1018
查看次数

Oracle Apex和Sharepoint

我被要求就一个我很少了解的主题做一些事情,需要一些帮助才能指明正确的方向.

我正在研究的问题是:

  1. SharePoint(2003和2010)相对于Oracle APEX的数据管理功能是什么?

  2. Oracle和SharePoint在何种程度上相互通信,以便一个中的数据可以导入另一个中或由另一个读取?

我对此有疑问:1.那里是否有足够的信息来开始回答这两个问题?2.我应该问什么后续问题?3.我的理解是APEX是一个应用程序(如微软访问),而Sharepoint更像是一个框架.那是对的吗?

oracle sharepoint oracle-apex

0
推荐指数
1
解决办法
2146
查看次数

无法创建视图 - 权限不足

我无法创建视图 - 我的权限不足.工作流 - >创建角色 - >将创建视图授予角色 - >创建用户 - >向用户添加角色 - >尝试创建视图,我得到错误.任何帮助将不胜感激

创造了一个角色

CREATE ROLE enrolment;
Run Code Online (Sandbox Code Playgroud)

授予以下角色特权 - 基础表hr.students

GRANT insert, select, update
ON hr.students
TO enrolment;
Run Code Online (Sandbox Code Playgroud)

还授予该角色的create view特权

GRANT create view 
TO enrolment;
Run Code Online (Sandbox Code Playgroud)

创建了以下用户

CREATE USER enrol1
IDENTIFIED BY pw4321;
Run Code Online (Sandbox Code Playgroud)

将该角色授予该帐户

GRANT enrolment
TO enrol1;
Run Code Online (Sandbox Code Playgroud)

当我尝试在基表hr.students上创建以下视图时,我被告知我没有足够的权限.我可以在基表上运行select语句.

CREATE OR REPLACE VIEW vu_student_name
 AS SELECT student_id, lastname
    FROM hr.students;
Run Code Online (Sandbox Code Playgroud)

sql oracle11g oracle-sqldeveloper

0
推荐指数
1
解决办法
3303
查看次数