“ CREATE TABLE”中的正则表达式

时间:2018-12-02 22:54:28

标签: sql regex oracle oracle-sqldeveloper

我遇到以下问题:我想用其ID和名称创建一个表Client。我还想检查“名称”字段是否仅包含字母。这是我的查询:

<link rel="stylesheet" type="text/css" href="food.css">
<html>

<head>
  <ul>
    <li><a class="active" href="index.php">Home </a></li>
    <li><a href="admin.html">Administration</a></li>
    <li><a href="contact.html">Contact</a></li>
  </ul>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>


</head>
<title> Food Website </title>

<body>
  <script src="searchFood.js" type="text/javascript"></script>
  <div class="food-container">
    <input type="text" id="foodName" name="foodName" placeholder="Enter food eg: Apple, Bread">
    <input type="submit" onclick="searchFoodDic()">
    <div id="searchedFood">

    </div>
  </div>
</body>

</html>

脚本工作正常,正在创建表。但是以下INSERT语句

CREATE TABLE CLIENT( ID NUMBER PRIMARY KEY, FIRST_NAME CHAR(10) CONSTRAINT NAME_CHECK CHECK(REGEXP_LIKE(FIRST_NAME, '^[A-Za-z]*$')) );

不起作用。这是错误文本:

INSERT INTO CLIENT
VALUES(1, 'BOB');

我确定这个错误的原因很明显,但是我只是不明白。我以前从未遇到过正则表达式问题。

预先感谢

1 个答案:

答案 0 :(得分:4)

我的猜测是问题在于空格。 CHAR()数据类型会自动填充长度的空格。

由于这个原因,可变长度字符串比固定长度字符串使用得更多。在Oracle中,这将是VARCHAR2()类型:

CREATE TABLE CLIENT (
    ID NUMBER PRIMARY KEY, 
    FIRST_NAME VARCHAR2(10) CONSTRAINT NAME_CHECK CHECK (REGEXP_LIKE(FIRST_NAME, '^[A-Za-z]*$'))
);

我可以再添加一些笔记:

  • 在这种情况下,我非常坚信主键是clientIdclient_id,而不是通用的id。这允许大多数外键引用使用完全相同的名称。
  • 10个字符对于名字来说太短了。