小编Sha*_*nce的帖子

检查字符串的CONSTRAINT只包含数字.(Oracle SQL)

我有一个专栏,比如PROD_NUM,其中包含一个用零填充的"数字".例如001004569.它们都是九个字符长.

我不使用数字类型,因为对数字的正常操作对这些"数字"没有意义(例如PROD_NUM*2没有任何意义.)并且因为它们的长度都相同,所以列定义为CHAR(9)

CREATE TABLE PRODUCT (
    PROD_NUM CHAR(9) NOT NULL
    -- ETC.
)
Run Code Online (Sandbox Code Playgroud)

我想约束PROD_NUM所以它只能包含九位数.没有空格,除了'0'到'9'之外没有其他字符

sql oracle

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

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

如何在引用变量之前测试变量是否已定义?

我希望能够在访问变量之前测试变量是否已定义.

我喜欢有一个指定"调试级别"的全局.如果调试级别为0,则不会给出额外的输出.当大于1时,给出调试输出,更大的数字更详细.

我还想设置它以便程序运行,如果我没有定义它,则假设级别为0.有点像:( defined?魔法在哪里,我不知道怎么办?

(if (and (defined? debug-level) (> debug-level 1))
    (diplay "Some debugging info"))
Run Code Online (Sandbox Code Playgroud)

我查看了The Scheme Programming Language,4th Edition中的表单摘要.我认为唯一可能的是identifier?.那没起效.

我正在使用SISC 1.16.6(索赔R5RS合规)和Chez Petite Scheme v8(索赔R6RS合规)

编辑我尝试evalguard类似的包装:

(guard (x (else #f)) (eval 'debug-level))
Run Code Online (Sandbox Code Playgroud)

'debug-level引用以来,它可以被评估并传递给eval.然后当eval试图评估它时,会发生错误,我希望guard会发现错误.它没有.

编辑2我意识到我想将调试跟踪包装成一个单独的过程,并且定义该过程的文件也可以debug-level使用默认值0 定义.使用单独过程的原因是降低过程中的行数这工作,并允许重新定向调试输出,如果需要.

scheme

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

检查空字符串时COALESCE vs IS NOT NULL性能

我在互联网上找到的一些文章比较了ISNULL和COALESCE,所以我认为我的问题有点不同.

我想知道哪个性能更好?

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';
Run Code Online (Sandbox Code Playgroud)

要么

SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> '';
Run Code Online (Sandbox Code Playgroud)

除了表现,在决定时我还应该考虑其他问题吗?

编辑:

我正在使用Teradata.

sql teradata

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

使用R5RS方案查找Hardy-Ramanujan数字.请提出成语和计算方面的改进建议.

我记得曾经看过[Srinivasa Ramanujan],当他在Putney生病时.我曾乘坐1729号出租车,并说这个数字对我来说相当沉闷,我希望这不是一个不利的预兆."不,"他回答说,"这是一个非常有趣的数字;它是以两种不同方式表达的两个立方体之和的最小数字." [GH Hardy在"1729(号码)"中说道]

"数学愤怒"中,约瑟夫·塔尔塔科夫斯基谈到了这一壮举,"那又怎么样?给我两分钟和我的计算器表,我会做同样的事情而不会施加任何小灰色细胞." 我不知道Tartakovsky先生将如何在计算器手表上完成该证明,但以下是我的方案函数,它枚举从1开始的数字,当它找到一个可以通过求和的多维数据集的两个单独方式表达的数字时停止两个正数.并且它的契约返回1729年.

有两个方面我会赞赏改进建议.一个领域是,对计划,风格和习语不熟悉.另一个区域是围绕计算.Sisc不会返回根的确切数字,即使它们可以.例如,(expt 27 1/3)产量为2.9999999999999996.但是当确定一个确切的数字,(expt 3 3)收益率时,我确实得到了确切的结果27.我的解决方案是获得立方根的确切底面,然后测试地板的立方体和地板的立方加一,如果匹配则计算为匹配.这个解决方案看起来很混乱,难以推理.有更简单的方法吗?

; Find the Hardy-Ramanujan number, which is the smallest positive
; integer that is the sum of the cubes of two positivie integers in
; two seperate ways.
(define (hardy-ramanujan-number)
  (let ((how-many-sum-of-2-positive-cubes
          ; while i^3 + 1 < n/1
          ;     tmp := exact_floor(cube-root(n - i^3))
          ;     if n = i^3 + tmp^3 or n = i^3 + (tmp + …
Run Code Online (Sandbox Code Playgroud)

scheme

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

使用CONNECT BY获取分层查询的每个级别的计数/总计

我对此感到很沮丧.我正在尝试针对具有递归关系(分层)的表编写查询(使用Oracle),并获取存储在树中每个节点下方的另一个表中的记录总数.另一个表只有与叶节点相关的记录.但是,我希望得到树中每个节点及其下方的总计.例如,假设我有两张桌子.DIRS包含目录名称和标识目录结构的递归关系,FILES包含带有DIRS外键的文件信息,指示文件所在的目录:

DIRS
====
DIR_ID 
PARENT_DIR_ID
DIR_NAME

FILES
=====
FILE_ID
FILE_NAME
DIR_ID
FILE_SIZE
Run Code Online (Sandbox Code Playgroud)

如果DIRS包含:

DIR_ID   PARENT_DIR_ID   DIR_NAME
======   =============   ========
1                        ROOT
2        1               DIR1_1
3        1               DIR1_2
4        2               DIR2_1
5        2               DIR2_2
Run Code Online (Sandbox Code Playgroud)

和FILES包含

FILE_ID   FILE_NAME   DIR_ID   FILE_SIZE
=======   =========   ======   =========
1         test1.txt   5        100
2         test2.txt   5        200
3         test5.txt   5         50 
4         test3.txt   3        300
5         test4.txt   3        300
6         test6.txt   4        100
Run Code Online (Sandbox Code Playgroud)

我想要一个返回路径的查询以及层次结构中每个节点中或下面的文件数.基本上是文件数量的汇总.所以查询结果看起来像这样:

Path                    File_Count
=====                   ===========
/ROOT                   6
/ROOT/DIR1_1            4
/ROOT/DIR1_1/DIR2_1     1
/ROOT/DIR1_1/DIR2_2     3
/ROOT/DIR1_2 …
Run Code Online (Sandbox Code Playgroud)

sql oracle

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

Oracle - 创建表没有并行选项

出于某种原因,当我在一个大表(4000万〜记录)上尝试CTAS(创建表为select)时,我在v $ session 18中看到了我的sql语句的活动会话.

当我试图暗示优化器使用更少的CPU时

create table table_name parallel (degree 2) as 
       select * from large_table;
Run Code Online (Sandbox Code Playgroud)

我看到6个活跃的会话.

学位3我看到8个活跃的课程.我尝试了学位默认,但它也创造了18个课程.

以前在代码中,在执行CREATE TABLE语句之前,我在会话中更改了一些属性:

alter session set workarea_size_policy = manual;
alter session set hash_area_size = 1048576000;
Run Code Online (Sandbox Code Playgroud)

我想在1个会话中创建表,我该怎么做?

谢谢 !

oracle plsql plsqldeveloper oracle-sqldeveloper

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

无法在 SSMS 中找到恢复数据库选项

我正在尝试使用 SSMS 在我的 SQL Server 中恢复一个 .bak 文件。
但是,当我右键单击“数据库”时,我无法在菜单栏中找到“还原数据库”选项。 在此处输入图片说明

可能的原因是什么?我是否需要更改一些 SSMS 设置。
我正在使用 SQL Server Management Studio 2014。

sql sql-server ssms database-restore ssms-2014

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

COALESCE是实现这一目标的最佳方法吗?

只想看看是否有人能更好地完成我所需要的。

首先是背景。我的数据库中有一个表,当前有大约20,000行。在表中,我们有一列用于名字和姓氏。还有一个列是ReferenceID。每个ReferenceID可以有多个FirstName,LastName组合。

这意味着当我们从表中执行select *时,我们为每个ReferenceID返回了多行(因为每个用户都有一行)。

我想同时将这两列连接到一个名为Name的列中,同时将ReferenceID的每一行都变成一个。(基本上是将数据展平)。

让我尝试在此处绘制一个ASCII图。

TABLE
ID        ReferenceID        FirstName        LastName
________________________________________________
1         1                  Mike             Ekim
2         1                  Tom              Mot
3         1                  Pete             Etep
4         2                  Ryan             Nayr
5         3                  Jerry            Yrrej
Run Code Online (Sandbox Code Playgroud)

所以我想要的最终结果是

RESULT SET
ReferenceID   Name
__________________________________
1              Mike Ekim, Tom Mot, Pete Etep
2              Ryan Nayr
3              Jerry Yrrej
Run Code Online (Sandbox Code Playgroud)

我真正需要知道的是,在我开始使用COALESCE并尝试调整结果之前,是否有更好的方法来实现这一目标?使用SQL Server 2005。

干杯,

麦克风

sql sql-server-2005

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

为什么不让`let`用于命名内部递归过程?

考虑以下函数来实现计算阶乘:[1]

(define fac-tail
  (lambda (n)
    (define fac-tail-helper
      (lambda (n ac)
        (if (= 0 n)
            ac
            (fac-tail-helper (- n 1) (* n ac)))))
    (fac-tail-helper n 1)))
Run Code Online (Sandbox Code Playgroud)

我试图用let内部定义重写:

(define fac-tail-2
  (lambda (n)
    (let ((fac-tail-helper-2
            (lambda (n ac)
              (if (= 0 n)
                  ac
                  (fac-tail-helper-2 (- n 1) (* n ac))))))
    (fac-tail-helper-2 n 1))))
Run Code Online (Sandbox Code Playgroud)

define时间没有错误,但执行结果为:

#;> (fac-tail-2 4)
Error: undefined variable 'fac-tail-helper-2'.
{warning: printing of stack trace not supported}
Run Code Online (Sandbox Code Playgroud)

如何使let版本有效?

方案版本是SISC v 1.16.6

[1]基于factorialSICP第1.2.1节的迭代版本http://mitpress.mit.edu/sicp/full-text/book/book-ZH-11.html#%_sec_1.2.1

lambda scheme factorial let

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